我得到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 举报,一经查实,本站将立刻删除。