gpt4 book ai didi

ruby - 了解 Ruby 嵌套函数

转载 作者:数据小太阳 更新时间:2023-10-29 07:48:03 24 4
gpt4 key购买 nike

我目前正在学习 ruby 。我试图了解闭包的工作方式,以及它们与函数的不同之处。 我完全知道应该通过 proc 或 lambda 实现闭包

我正在努力深入了解 ruby 。因此,我检查了各种非正统代码。我试图理解为什么第 3 行有效而第 5 行出错。

x=123
def b(x)
p x
def a(u)
p x # why is this an error?!?!?
end
a 4
end

b 1
  1. 如果a不能访问b的参数,为什么不访问全局的x=123?
  2. 如果我将第 1 行和第 5 行显式更改为全局“$x”,为什么这会起作用?
  3. 如果我显式使用 lambda,为什么这会起作用?

这纯粹是一个学习练习,我这样做是为了了解幕后发生的事情。

最佳答案

这就是所谓的“作用域门”。基本上,当您开始定义方法/类/模块时,会创建一个新范围,并且无法访问来自其他范围的所有局部变量。这不适用于实例/全局变量,您将继续访问这些变量。

由于 lambda 不是一种方法,因此它不会创建新范围而是重用现有范围。

此外,

why line 3 works

x = 123
def b(x)
p x # this "x" is "x the parameter", not "x the local variable from outer scope"
# that's why it works. If you tried to access the local var, it wouldn't work.
def a(u)
p x # like here, see? Doesn't work.
end
a 4
end

b 1

关于ruby - 了解 Ruby 嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com