我试图评估表达式(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为零.