【问题标题】:Ruby accessing outer variables in nested functionRuby访问嵌套函数中的外部变量
【发布时间】:2009-06-19 05:04:36
【问题描述】:

我确信对此有一个简单的答案;我似乎无法找到它。我在 Ruby 中创建了一个嵌套函数,但在从内部函数内部的外部函数访问变量时遇到了问题:

def foo(x)
  def bar
    puts x
  end
  bar
  42
end

foo(5)

我得到:NameError: undefined local variable or methodx' for main:Object`

类似的 Python 代码可以工作:

def foo(x):
  def bar():
    print x
  bar()
  return 42

foo(5)

那么我如何在 Ruby 中做同样的事情呢?

【问题讨论】:

  • 这里一个重要(但微妙)的区别是 def...end 定义了一个方法,而不是一个函数。使用 lambda/proc 定义函数并在闭包中捕获局部变量,如 tadman 所示。

标签: ruby nested scope


【解决方案1】:

据我所知,在函数中定义命名函数不会让您访问任何局部变量。

你可以做的是使用 Proc:

def foo(x)
  bar = lambda do
    puts x
  end
  bar.call
  42
end

foo(5)

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 2018-10-23
    • 2014-02-18
    • 1970-01-01
    • 2018-07-16
    • 2019-09-29
    • 2019-06-14
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多