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

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

发布时间:2020-12-17 03:24:01 所属栏目:百科 来源:网络整理
导读:我得到NameError:未定义的局部变量或使用 ruby 2.1.2的方法 正如在this question中观察到的那样,表达式如: bar if bar = true 引发未定义的局部变量错误(假设事先未定义bar),因为解析器在分配之前会读取bar.而且我相信这个表达方式与以前没什么区别: bar
我得到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上

(编辑:李大同)

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

    推荐文章
      热点阅读