javascript - Ruby 作用域,从函数返回 Proc

标签 javascript ruby scope proc

我有 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/

相关文章:

lua - Lua 中的 const 和 close 关键字实际上有什么作用吗?

javascript - 这个 addon-sdk 实现期望什么作为访问插件文件系统的参数?

javascript - VVO Lazyload 在页面加载时加载所有图像

javascript - 使用 Node js 更新 BigQuery 中的数据

html - Maruku 错误地解析了第二行代码块?

ruby - 如何使用 Shopify API 根据 SKU 搜索产品?

javascript - 在 javascript 中向第三方闭包添加函数

javascript - AngularJS $scope 更新未反射(reflect)在 View 中

javascript - 响应式三列重新堆叠

具有非阻塞或多线程功能的 Ruby Tcp Server 类