Mat*_*orn 17
我遇到了一个问题,因为'^'运算符对数字按位运算,
true ^ 1
=> false
1 ^ true
TypeError: can't convert true into Integer
true ^ 1
所以我的解决方法是:
( !!a ^ !!b ) 双爆会将他们强制成布尔人.
!!1 ^ !!true
=> false
!!1 ^ !!false
=> true
Mik*_*use 13
首先,我不认为短路可以合理地应用于XOR:无论第一个操作数的值如何,第二个操作数都需要进行检查.
其次,和,&&,或和|| 在所有情况下都使用短路; "word"和"symbol"版本之间的唯一区别是优先级.我认为and并且or存在以提供与perl相同的功能
process_without_error or die
我认为没有xor命名函数的原因可能是在这种情况下低优先级运算符没有意义,并且它已经是一个令人困惑的情况!
Ale*_*yne 10
尝试 ^
true  ^ false #=> true
true  ^ true  #=> false
false ^ false #=> false
虽然没有简单的英语等效运算符
作为Matt Van Horn在任意类型上使用XOR的双重否定技巧的替代方法,您可以链接另一个XOR测试,从开始nil.即:
!!foo ^ !!bar
相当于
nil ^ foo ^ bar
这看起来更贴近我的眼睛,我想这需要一个不太合乎逻辑的操作