有没有办法从不同范围内定义的块访问对象?对不起,如果它令人困惑,我提供一个小例子:
def scope(&block)
foo = "bar"
instance_eval &block
end
scope do
puts "foo is #{foo}"
end
我想得到输出:
"foo is bar"
是否可以?
有没有办法从不同范围内定义的块访问对象?对不起,如果它令人困惑,我提供一个小例子:
def scope(&block)
foo = "bar"
instance_eval &block
end
scope do
puts "foo is #{foo}"
end
我想得到输出:
"foo is bar"
是否可以?
真正的问题是你想要做什么,但你能得到的最接近的是:
def scope
@foo = "bar"
yield
end
scope do
puts "foo is #{@foo}"
end
请注意使用实例变量@foo
而不是局部变量。除非您明确地这样做,否则您无法访问实例变量,如下所示:
def scope
foo = "bar"
yield foo
end
scope do |foo|
puts "foo is #{foo}"
end
但这很好。否则很难避免与局部变量发生冲突。
注意:我还将您对显式的使用替换&block
为隐式yield
。该yield
表单需要一个块存在,并且语法更简单,但这主要是样式问题。