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

use*_*008 41 ruby scope nested

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

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

foo(5)
Run Code Online (Sandbox Code Playgroud)

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

类似的Python代码有效:

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

foo(5)
Run Code Online (Sandbox Code Playgroud)

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

tad*_*man 48

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

你可以做的是使用Proc:

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

foo(5)
Run Code Online (Sandbox Code Playgroud)