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

前端之家收集整理的这篇文章主要介绍了ruby – ||即使第一个参数为真,运算符也会评估第二个参数.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图评估表达式(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为零.

猜你在找的Ruby相关文章