Ruby在嵌套函数中访问外部变量

时间:2009-06-19 05:04:37

标签: ruby nested scope

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

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

foo(5)

我得到:NameError: undefined local variable or method x'代表main:Object`

类似的Python代码有效:

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

foo(5)

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

1 个答案:

答案 0 :(得分:47)

据我所知,在函数中定义一个命名函数并不能让你访问任何局部变量。

你可以做的是使用Proc:

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

foo(5)