Я столкнулся с проблемой с 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
. Я ожидаю, что они будут в той же области.
Спасибо!