instance_eval
モジュールの組み込みに関する問題に遭遇しました。
次のコードを見てください。
module B
class C
def initialize
puts 'This is C'
end
end
def hello
puts 'hello'
end
end
class A
include B
def initialize(&block)
hello
C.new
instance_eval(&block)
end
end
A.new do
hello
C.new
end
このコードを実行すると、
hello
This is C
hello
-:25:in `block in ': uninitialized constant C (NameError)
from -:19:in `instance_eval'
from -:19:in `initialize'
from -:23:in `new'
from -:23:in `'
バインディングと、メソッドとオブジェクトがクラスにバインドされる方法に関係があることを理解しています。私が理解できないのは、なぜC
内A
にアクセスできるのかということですが、block
. 私はそれらが同じ範囲にあることを期待しています。
ありがとう!