当前位置 : 主页 > 编程语言 > ruby >

了解Ruby嵌套函数

来源:互联网 收集:自由互联 发布时间:2021-06-23
我现在正在学习ruby.我试图了解闭包的工作方式,以及它们与函数的区别.我完全知道闭包应该通过proc或lambda来实现. 我想要深入了解ruby.因此,我检查各种非正统的代码.我试图理解为什么
我现在正在学习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

>如果a无法访问b的参数,为什么不访问全局x = 123?
>如果我明确使用更改行1& 5到全球“$x”?
>如果我明确地使用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
网友评论