Ruby:方法莫名其妙地被覆盖并设置为nil

发布时间:2019-04-23 整理:编程之家
编程之家收集整理的这篇文章主要介绍了Ruby:方法莫名其妙地被覆盖并设置为nil编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!
如果我执行这个ruby代码:
def foo
  100
end

p defined?(foo),foo
if false
  foo = 200
end
p defined?(foo),foo

我得到的输出是:

"method"
100
"local-variable"
nil

有人可以向我解释为什么在不执行if后foo被设置为nil?这是预期的行为还是红宝石?

解决方法

分配左侧的名称设置为nil,即使在if false情况下无法访问代码也是如此.
>> foo
NameError: undefined local variable or method `foo' for main:Object
...
>> if false
..   foo = 1
..   end #=> nil
>> foo #=> nil

当Ruby尝试解析裸字时,它首先查找局部变量(在Pickaxe书中有一个引用,我现在似乎无法找到).因为你现在有一个名为foo的它显示为nil.正如Mischa所说,该方法仍然可以称为foo().

总结

以上是编程之家为你收集整理的Ruby:方法莫名其妙地被覆盖并设置为nil全部内容,希望文章能够帮你解决Ruby:方法莫名其妙地被覆盖并设置为nil所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!