我相信有一个简单的答案;我就是找不到.我在Ruby中创建了一个嵌套函数,从内部函数中的外部函数访问变量时遇到了问题:

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

foo(5)

我得到:NameError: undefined local variable or method倍的主要:对象`

类似的Python代码可以工作:

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

foo(5)

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

推荐答案

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

你可以改为使用Proc:

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

foo(5)

Ruby相关问答推荐

Ruby将字符串中的反斜杠替换为双反斜杠

数组上的Ruby#unionreact 非常奇怪

警告 Selenium [弃用] Manager#logs 已弃用.使用 Chrome::Driver#logs 代替

Ruby 中无法解释的撬动行为

Ruby 匹配第一次出现的字符串以进行 gsub 替换

厨师从源代码安装和更新程序

如何在加载文件时禁用重新定义常量的警告

使用 RSpec 存根 Time.now

Integer(value) 和 value.to_i 之间的区别

如何期望 RSpec should_receive 的一些(但不是全部)参数?

为什么 Ruby 使用 respond_to?而不是 responds_to?

无法在 macos-10.15.6 上Bundle 安装 puma 4.3.5 或 gem puma 与 ruby​​-2.6.6

如何使用 Ruby 2.3 中引入的 Array#dig 和 Hash#dig?

在Ruby中实现平等的正确方法是什么

将两个数组组合成哈希

相当于 Ruby 的 cURL?

如何在不为 RVM 用户授予 sudo 访问权限的情况下安装 RVM 系统要求

如何在 Ruby 中将时间四舍五入到最接近的 15 分钟?

Ruby中的字符串和符号有什么区别?

如何在文件夹及其所有子文件夹中搜索特定类型的文件