简单的代码,不知道如何使其工作:
def foo(&block)
bar = 0
block.call
end
foo do
puts bar
end
如何管理阻止使用bar
方法范围内的foo
变量?
我尝试实施DSL,其中一项功能是定义如何解析IO
中的数据并将其转换为Request
变量。
所以我想创建这样的文件:
class FooParser < AbstractParser
read_from_io do
request = io.readline
end
end
定义,read_from_io应该如何直接工作。
所以我认为,我的AbstractParser应该是这样的:
class AbstractParser
def initialize
@io = IO.new
@request = ""
end
def read_from_io(&block)
@io_reader = block
end
....
def read
io = @io
request = @request
#here i want to pass io and request to block
@io_reader.call
end
end
答案 0 :(得分:1)
只需将其传递给一个区块:
def foo
bar = 0
yield bar
end
foo do |bar|
puts bar
end
或者,如果您确实需要将您的区块视为Proc
:
def foo(&block)
bar = 0
block.call bar
end