AND运算符返回第二个值时,第一个是真实的,第一个当它是假红宝石为什么0 || 1是0
1 && 2 ---> 2
0 && 1 ---> 0
为什么还是操作不返回第二个值时,第一个是假的,但返回第一个时,它的true
0 || 1 ---> 0
1 || 0 ---> 1
AND运算符返回第二个值时,第一个是真实的,第一个当它是假红宝石为什么0 || 1是0
1 && 2 ---> 2
0 && 1 ---> 0
为什么还是操作不返回第二个值时,第一个是假的,但返回第一个时,它的true
0 || 1 ---> 0
1 || 0 ---> 1
红宝石只计算,因为它需要在这样一个表达尽可能多的,然后停止,你看到返回的是刚刚过去的部分它评估的表达。 因此,对于你的& &的情况,它总是必须运行到最后,以防止后面的子句返回false并导致AND为假。
而实际上你的例子是错误的:
irb> 0 && 1
=> 1
因为0其中,预计是在Ruby中truthy,还不如假像C.
对于OR情况下,能够尽快停止它会触及任何有趣的事物,并且不需要打扰其他事物。
0 || false # => 0
false || 0 # => 0
false || 0 || 2 # => 0
如果要强制这样的表达式为布尔你这是怎么经常看到它做:
!!(expression)
!!(0 || 1) => true
!!(nil || false) => false
||是一个逻辑运算符,不是一个按位运算符。与例如C的其他语言不同,在ruby中,0不是“虚假”的值。
因为||是一个短路逻辑运算符,您有以下等效语句:
定义值“0”||定义的值 “1”
哪红宝石被正确地评价为truthy表达式A || truthy表达乙和返回truthy表达式A即0
在这里看到:https://gist.github.com/jfarmer/2647362
为 “Truthy”,并在Python和Ruby “Falsey” 值的很好的概述。
有两件事情在这里发生了:
0
是truthy(这意味着它是评估在布尔上下文是真的)。||
)快捷方式,如果它是truthy,则返回左边的参数。把这两个在一起,你会得到0 || 1
返回0
'0 && 1'回报'1',不'0' – Stefan