Desidero avere accesso ai binding del chiamante. Cosa c'è che non va qui?Come chiamare un blocco rubino per accedere ai collegamenti del chiamante
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
Perché non ho accesso all'istanza del chiamante all'interno del blocco specificato?
Caro Downvoter! Sono relativamente nuovo qui e sarebbe bello ricevere alcuni consigli se la mia domanda non è utile. :-) Ho cambiato il codice della domanda in una classe di test completa 'BlocksTest'. Ho anche cambiato la chiamata di blocco nel metodo 'run' da' @ block.call' a 'instance_eval {@ block.call}' che solleva lo stesso errore. – sschmeck