呼び出し元のバインディングにアクセスしたいと思っています。ここで何が間違っていますか?rubyブロックを呼び出して呼び出し元のバインディングにアクセスする方法
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
なぜ特定のブロック内の呼び出し側インスタンスにアクセスできないのですか?
親愛なるを試してみてくださいダウンホッター!私はここでは比較的新しいです、そして、私の質問が役に立たないなら、いくつかのアドバイスを得ることはうれしいでしょう。 :-)質問コードを完全なテストクラス 'BlocksTest'に変更しました。私は 'run'メソッドのブロック呼び出しを' @ block.call'から 'instance_eval {@ block.call}'に変更しました。これは同じエラーを発生させます。 – sschmeck