我有 JavaScript 背景,已经习惯了使用 JavaScript 的动态范围将值封装在函数中。例如:
function Dog( firstname, lastname ) {
this.fullname = firstname + lastname
return {
say_name: function () {
return fullname;
}
}
}
现在在 Ruby 中,我不太确定这样的东西是否会工作得很好:
class Foo
attr_accessor :bar, :baz
def initialize bar, baz
@bar = bar
@baz = baz
end
def give_me_a_proc
return Proc.new { @bar + @baz }
end
end
谁能快速解释一下作用域在 Ruby 中的工作原理?如果我调用从 give_me_a_proc
返回的 Proc,它是否仍然可以访问其定义时间范围?
此外,一旦我定义了 proc,这些值是否会固定下来,或者在 Foo
中所做的任何更改是否会在 Proc 已被定义后继续执行?
最佳答案
是的,它仍然可以访问定义时间范围。参见 documentation for Proc class .
更改会向下传递到 Proc 后定义。 irb 的结果与您的类(class)一起运行。
> foo = Foo.new(1, 2)
=> #<Foo:0x007f9002167080 @bar=1, @baz=2>
> quux = foo.give_me_a_proc
=> #<Proc:0x007f900214f688@(irb):11>
> quux.call
=> 3
> foo.bar = 3
=> 3
> quux.call
=> 5
关于javascript - Ruby 作用域,从函数返回 Proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583085/