||= 和 |= 与布尔值之间的区别是什么
Whats the dfference between ||= and |= with booleans
我知道 a ||= b
的行为类似于 a || a = b
,而 a |= b
的行为类似于 a = a | b
在使用布尔值时,使用哪种会有所不同吗?我认为唯一的实际区别是如果 a
和 b
为真,||=
将不会分配,这是唯一的区别吗?
而 Oring
如果任何语句是 true
则完成的语句将仅 return true
。
类似地,当 Anding
如果任何语句是 false
则完成的语句将仅 return false
。
||
和 |
之间的主要区别是当 ||
的第一条语句是 truthy
时,其他语句不执行。而 |
将执行所有语句,即使第一个语句是 truthy
.
考虑以下 ||
的示例
2.6.5 :001 > a = 4
=> 4
2.6.5 :002 > a ||= (b = 9) # same as a = 4 || 9
=> 4
2.6.5 :003 > a
=> 4
2.6.5 :004 > b
=> nil
|
的示例(对于 int | other_int
它将执行 bitwise OR
ref )
2.6.5 :005 > c = 6
=> 6
2.6.5 :006 > c |= (d = 8) # same as a = 0110 || 1110
=> 14
2.6.5 :007 > c
=> 14
2.6.5 :008 > d
=> 8
对于布尔值
||
示例
2.6.5 :001 > a = true
=> true
2.6.5 :002 > a ||= (b = false)
=> true
2.6.5 :003 > a
=> true
2.6.5 :004 > b
=> nil
|
的示例
2.6.5 :005 > c = true
=> true
2.6.5 :006 > c |= (d = false)
=> true
2.6.5 :007 > c
=> true
2.6.5 :008 > d
=> false
不太正确。通常,X=
运算符的行为类似于 A = A X B
,其中 X
是受支持的运算符之一。值得注意的是,它始终位于 =
.
的右侧
也就是说,|
和 ||
是两个 非常 不同的运算符。 |
版本通常被理解为执行 二进制数学 ,如:
2 | 1
# => 3
这是 0b10
和 0b01
与二进制 OR 组合的结果。
它也做数组联合:
[ 1, 2 ] | [ 2, 3 ]
# => [ 1, 2, 3 ]
而 ||
对值的 真实性 进行更高级别的逻辑测试。在Ruby中只有nil
和false
被认为是non-truthful,所有其他值被认为是真实,所以:
0 || 1
# => 0
false || true
# => true
nil || "yes"
# => "yes"
同样的原则适用于&
和&&
。
有趣的是 |
和 &
是方法调用,它们的实际功能取决于运算符左侧的内容,而 ||
和 &&
是语法元素你无法改变,总是以同样的方式工作。
那么 |=
和 ||=
在哪里发挥作用呢?在某些情况下您会看到它们。
设置位标志:
flags |= 0b0010
应用默认值:
max ||= MAX_DEFAULT
我知道 a ||= b
的行为类似于 a || a = b
,而 a |= b
的行为类似于 a = a | b
在使用布尔值时,使用哪种会有所不同吗?我认为唯一的实际区别是如果 a
和 b
为真,||=
将不会分配,这是唯一的区别吗?
而 Oring
如果任何语句是 true
则完成的语句将仅 return true
。
类似地,当 Anding
如果任何语句是 false
则完成的语句将仅 return false
。
||
和 |
之间的主要区别是当 ||
的第一条语句是 truthy
时,其他语句不执行。而 |
将执行所有语句,即使第一个语句是 truthy
.
考虑以下 ||
2.6.5 :001 > a = 4
=> 4
2.6.5 :002 > a ||= (b = 9) # same as a = 4 || 9
=> 4
2.6.5 :003 > a
=> 4
2.6.5 :004 > b
=> nil
|
的示例(对于 int | other_int
它将执行 bitwise OR
ref )
2.6.5 :005 > c = 6
=> 6
2.6.5 :006 > c |= (d = 8) # same as a = 0110 || 1110
=> 14
2.6.5 :007 > c
=> 14
2.6.5 :008 > d
=> 8
对于布尔值
||
2.6.5 :001 > a = true
=> true
2.6.5 :002 > a ||= (b = false)
=> true
2.6.5 :003 > a
=> true
2.6.5 :004 > b
=> nil
|
2.6.5 :005 > c = true
=> true
2.6.5 :006 > c |= (d = false)
=> true
2.6.5 :007 > c
=> true
2.6.5 :008 > d
=> false
不太正确。通常,X=
运算符的行为类似于 A = A X B
,其中 X
是受支持的运算符之一。值得注意的是,它始终位于 =
.
也就是说,|
和 ||
是两个 非常 不同的运算符。 |
版本通常被理解为执行 二进制数学 ,如:
2 | 1
# => 3
这是 0b10
和 0b01
与二进制 OR 组合的结果。
它也做数组联合:
[ 1, 2 ] | [ 2, 3 ]
# => [ 1, 2, 3 ]
而 ||
对值的 真实性 进行更高级别的逻辑测试。在Ruby中只有nil
和false
被认为是non-truthful,所有其他值被认为是真实,所以:
0 || 1
# => 0
false || true
# => true
nil || "yes"
# => "yes"
同样的原则适用于&
和&&
。
有趣的是 |
和 &
是方法调用,它们的实际功能取决于运算符左侧的内容,而 ||
和 &&
是语法元素你无法改变,总是以同样的方式工作。
那么 |=
和 ||=
在哪里发挥作用呢?在某些情况下您会看到它们。
设置位标志:
flags |= 0b0010
应用默认值:
max ||= MAX_DEFAULT