01:23:40 shelby:~/src/ruby/misc$ cat append_features.rb class Module alias :old_include :include def include(arg) p self.name p arg.name old_include(arg) end def append_features(arg) p self.name p arg.name end end if $0 == __FILE__ module Foo; end class Test include Foo end end 01:24:14 shelby:~/src/ruby/misc$ ruby append_features.rb "Test" "Foo" "Foo" "Test"結果を見て、クラスとモジュールページを見て、ソースを見て、どうやらincludeメソッドの中でreceiverとparameterを入れ替えていることがわかる。 なぜ、そんな事をしているかわからなかったが、結局モジュールの方で何らかの付加処理をしたい場合にそうなっていないと書けないことに気づく。
--------------------------------------------------------------- 6.3 クラスのインスタンス変数とは何ですか class Foo @a = 123 # (1) def foo p @a # (2) ... 123でなくnilになる. end end (1)がクラスのインスタンス変数,(2)が通常のインスタンス変数です. (2)は クラスFooのインスタンスに属するのに対し,(1)はFooというク ラスオブジェクト(Classのインスタンス)に属します. インスタンスメソッドからクラスのインスタンス変数に直接アクセス することはできません. 上のように初期化されていないインスタンス変数とみなされ,nilにな ります. ---------------------------------------------------------------