12

呼び出し元のバインディングにアクセスしたい。ここで何が問題なのですか?

require 'test/unit'

class BlocksTest < Test::Unit::TestCase

  class Blocks
    def initialize( &block ); @block = block; end
    def run; instance_eval { @block.call }; end

    def foo; 'foo'; end
  end

  def test_say_foo_via_string
    assert_equal( 'foo', Blocks.new{ 'foo' }.run )
  end
  # => successful

  def test_say_foo_via_caller_method
    assert_equal( 'foo', Blocks.new{ foo }.run )
  end
  # => NameError: undefined local variable or method `foo'

end

特定のブロック内の呼び出し元インスタンスにアクセスできないのはなぜですか?

4

3 に答える 3

0

これを試して

class Blocks
  def initialize( &block ); @block = block; end
  def run; instance_eval &@block; end

  def foo; 'foo'; end
end
于 2013-07-01T09:44:18.910 に答える