0

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 `'

バインディングと、メソッドとオブジェクトがクラスにバインドされる方法に関係があることを理解しています。私が理解できないのは、なぜCAにアクセスできるのかということですが、block. 私はそれらが同じ範囲にあることを期待しています。

ありがとう!

4

1 に答える 1