ruby为什么0 | | 1是0
运算符在第一个值为真时返回第二个值,在第一个值为假时返回第一个值ruby为什么0 | | 1是0,ruby,boolean,bitwise-operators,Ruby,Boolean,Bitwise Operators,运算符在第一个值为真时返回第二个值,在第一个值为假时返回第一个值 1 && 2 ---> 2 0 && 1 ---> 0 为什么OR操作在第一个值为false时不返回第二个值,而在第一个值为true时返回第一个值 0 || 1 ---> 0 1 || 0 ---> 1 OR和都是短路计算的,只要它们知道它们给您的表达式的值。 在Ruby中,0和1都是真的,它们都是真值。所以 0 | | 1是0 因为0是真的。 只要nil | | 1或f
1 && 2 ---> 2
0 && 1 ---> 0
为什么OR操作在第一个值为false时不返回第二个值,而在第一个值为true时返回第一个值
0 || 1 ---> 0
1 || 0 ---> 1
OR和都是短路计算的,只要它们知道它们给您的表达式的值。 在Ruby中,0和1都是真的,它们都是真值。所以
0 | | 1是0
因为0是真的。
只要
nil | | 1
或false | | 1
就会返回1。或和都是短路计算的,只要他们知道他们给你的表达式的值。
在Ruby中,0和1都是真的,它们都是真值。所以
0 | | 1是0
因为0是真的。
只要
nil | | 1
或false | | 1
将返回1。|是一个逻辑运算符,而不是位运算符。与其他语言不同,例如C,0在ruby中不是一个“假”值
因为| |是一个短路逻辑运算符,所以您有以下等效语句:
定义值“0”| |定义值“1”
哪个ruby正确地计算为truthy表达式A | | truthy表达式B并返回truthy表达式A,即0
请看这里:
了解Python和Ruby中“Truthy”和“false”值的详细信息。| |是一个逻辑运算符,而不是位运算符。与其他语言不同,例如C,0在ruby中不是一个“假”值 因为| |是一个短路逻辑运算符,所以您有以下等效语句: 定义值“0”| |定义值“1” 哪个ruby正确地计算为truthy表达式A | | truthy表达式B并返回truthy表达式A,即0 请看这里:
对于Python和Ruby中的“Truthy”和“false”值的良好概述,这里有两个方面:
0
是真实的(这意味着它在布尔上下文中被计算为s true)|
)中的OR运算符可以设置快捷方式并返回左参数(如果它是truthy)把这两个放在一起,你会发现
0 | | 1
返回0
这里有两件事:
0
是真实的(这意味着它在布尔上下文中被计算为s true)|
)中的OR运算符可以设置快捷方式并返回左参数(如果它是truthy)把这两个放在一起,你会发现
0 | | 1
返回0
Ruby在这样一个表达式中只计算它需要的值,然后停止,你看到返回的只是它计算的表达式的最后一部分。
因此,对于&&case,它必须一直运行到结尾,以防后面的子句返回false,从而导致and为false
事实上,你的例子是错误的:
irb> 0 && 1
=> 1
这是意料之中的,因为0在Ruby中是真实的,不像在C中那么虚假
对于OR的情况,它可以在碰到任何真实的东西时立即停止,而不需要对其余部分进行处理
0 || false # => 0
false || 0 # => 0
false || 0 || 2 # => 0
如果要将这样的表达式强制为布尔表达式,通常会看到这样的操作:
!!(expression)
!!(0 || 1) => true
!!(nil || false) => false
Ruby在这样的表达式中只计算所需的值,然后停止,您看到返回的只是它计算的表达式的最后一部分。 因此,对于&&case,它必须一直运行到结尾,以防后面的子句返回false,从而导致and为false 事实上,你的例子是错误的:
irb> 0 && 1
=> 1
这是意料之中的,因为0在Ruby中是真实的,不像在C中那么虚假
对于OR的情况,它可以在碰到任何真实的东西时立即停止,而不需要对其余部分进行处理
0 || false # => 0
false || 0 # => 0
false || 0 || 2 # => 0
如果要将这样的表达式强制为布尔表达式,通常会看到这样的操作:
!!(expression)
!!(0 || 1) => true
!!(nil || false) => false
0&&1
返回1
,而不是0
0&&1
返回1
,而不是0