久保田です。

From: Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp>
Subject: [ruby-list:33764] Re: Redefinition of builtin class
Date: Tue, 5 Feb 2002 15:56:37 +0900

> 原です。
> 
> >久保田です。
> 
> >これは普通のクラスの親クラスを再定義の時には変更できないとい
> >う事なのでしょうか?それとも、builtin classだけの話なんです
> >か?
> 
> あ、すいません。私の付けたこのスレッドのタイトルがまずいですね。
> built-in かどうかは関係ないのですね。

どうも、こちらこそ全然わかっていないのに口をはさんですいませ
んでした。再定義と修正の意味がわからなくて、いろいろと実験し
ていました。一応下が実験のまとめ。知っている人には意味ないで
すけど。

ただ、一つ気になったのは、再定義する前のクラスで作ったインス
タンスのクラス名は元のままなのですが、これはこんなものなので
しょうか?

17:39:11 shelby:~/src/ruby/misc$ /usr/local/bin/ruby -v
ruby 1.6.6 (2001-12-26) [i586-linux]

17:40:41 shelby:~/src/ruby/misc$ cat redefine.rb
class A < Array
  def foo
  end
end

a = A.new
puts "a.respond_to? :foo => #{a.respond_to? :foo}"

class A < Hash
  def bar
  end
end

aa = A.new
puts "a.respond_to? :foo => #{a.respond_to? :foo}"
puts "a.respond_to? :bar => #{a.respond_to? :bar}"
puts "a.class => #{a.class}"
puts "aa.respond_to? :foo => #{aa.respond_to? :foo}"
puts "aa.class => #{aa.class}"

17:40:48 shelby:~/src/ruby/misc$ /usr/local/bin/ruby redefine.rb
a.respond_to? :foo => true
redefine.rb:9: warning: already initialized constant A
a.respond_to? :foo => true
a.respond_to? :bar => false
a.class => A
aa.respond_to? :foo => false
aa.class => A

----------------------------------------------
久保田俊也 E-mail:em6t-kbt / asahi-net.or.jp
           http://www.asahi-net.or.jp/~em6t-kbt/