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

ruby – ||即使第一个参数为真,运算符也会评估第二个参数.

发布时间:2020-12-16 21:40:23 所属栏目:百科 来源:网络整理
导读:我试图评估表达式(a = 10)|| (rr = 20),而rr变量未定义 所以在评估前面的表达式返回之前,在ruby控制台中输入rr rrNameError: undefined local variable or method `rr' for main:Objectfrom (irb):1from :0 当我写表达式(a = 10)|| (rr = 20)它返回10,当我写
我试图评估表达式(a = 10)|| (rr = 20),而rr变量未定义

所以在评估前面的表达式返回之前,在ruby控制台中输入rr

rr
NameError: undefined local variable or method `rr' for main:Object
from (irb):1
from :0

当我写表达式(a = 10)|| (rr = 20)它返回10,当我写rr之后它说没有

(a=10) || (rr=20)
rr  # => nil

那么为什么会这样呢?不应该只有在||的第二个参数被定义运算符进行评估,这不应该基于文档?

解决方法

这是因为当ruby解释器看到一个赋值给它(但在它执行实际的代码行之前)定义了一个变量.你可以阅读更多关于它 in this answer.

布尔OR(||)表达式将评估为左边表达式的值,如果它不是nil而不是false,否则||将评估右手表达的价值.

在你的例子中,ruby解释器看到一个赋值给一个和rr(但是它不执行这一行),并用nil初始化(定义,创建)a和rr.然后它执行||表达.在这个||表达式,a被分配到10和10被返回. r = 20未被评估,rr不改变(仍为零).这就是为什么在下一行rr为零.

(编辑:李大同)

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

    推荐文章
      热点阅读