加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

了解Ruby嵌套函数

发布时间:2020-12-17 01:32:04 所属栏目:百科 来源:网络整理
导读:我现在正在学习ruby.我试图了解闭包的工作方式,以及它们与函数的区别.我完全知道闭包应该通过proc或lambda来实现. 我想要深入了解ruby.因此,我检查各种非正统的代码.我试图理解为什么第3行工作而第5行是错误. x=123def b(x) p x def a(u) p x # why is this
我现在正在学习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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读