Tôi muốn có quyền truy cập vào các ràng buộc của người gọi. Có gì sai ở đây?Cách gọi một khối ruby để có quyền truy cập vào các ràng buộc người gọi
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
Tại sao tôi không có quyền truy cập vào cá thể người gọi trong khối đã cho?
thân mến Downvoter! Tôi tương đối mới ở đây và nó sẽ được tốt đẹp nhận được một số lời khuyên nếu câu hỏi của tôi là không hữu ích. :-) Tôi đã thay đổi mã câu hỏi thành một lớp thử nghiệm hoàn chỉnh 'BlocksTest'. Tôi cũng đã thay đổi lệnh gọi khối trong phương thức 'run' từ' @ block.call' thành 'instance_eval {@ block.call}', nó làm tăng cùng một lỗi. – sschmeck