微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NameError:undefined – 在Ruby 2.1.2中更改了局部变量的解析规则吗?

我得到NameError:未定义的局部变量或使用 ruby 2.1.2的方法

正如在this question中观察到的那样,表达式如:

bar if bar = true

引发未定义的局部变量错误(假设事先未定义bar),因为解析器在分配之前会读取bar.而且我相信这个表达方式与以前没什么区别:

bar if bar = false

两者之间的区别在于主体是否被评估,但是如果遇到未定义的局部变量,则在评估条件之前立即引发错误并不重要.

但是当我在Ruby 2.1.2上运行第二个代码时,它不会引发错误.它之前是这样吗?如果是这样,那么解析讨论的内容是什么?如果没有,Ruby规范是否已更改?有没有提到这个?它在1.8.7,1.9.3等中做了什么?

解决方法

是的,它在ruby2.1.2中有所改变

在1.8.7,1.9.3,2.0.0甚至2.1.1中,我得到2个警告,没有错误

2.0.0-p247 :007 > bar if bar = false
(irb):7: warning: found = in conditional,should be ==
 => nil 
2.0.0-p247 :008 > bar if bar = true
(irb):8: warning: found = in conditional,should be ==
 => true

而在2.1.2版本中你提到我得到2个警告和1个NameError错误.

2.1.2 :001 > bar if bar = true
(irb):1: warning: found = in conditional,should be ==
NameError: undefined local variable or method `bar' for main:Object
        from (irb):1
        from /home/durrantm/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>'
2.1.2 :002 > bar if bar = false
(irb):2: warning: found = in conditional,should be ==
 => nil

这是在我的Ubuntu 14上

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐