我知道這意味着或|有什麼區別? vs. ||
true || false
=> true
,但有一天,我無意中用一條垂直線,而不是發現我的代碼仍然工作。
true | false
=> true
false | false
=> false
那麼這些差異是什麼?和||?它們是否相同?
我知道這意味着或|有什麼區別? vs. ||
true || false
=> true
,但有一天,我無意中用一條垂直線,而不是發現我的代碼仍然工作。
true | false
=> true
false | false
=> false
那麼這些差異是什麼?和||?它們是否相同?
|是按位或運算符。 ||是邏輯OR運算符。
在這裏查看這兩個運營商的解釋:http://www.tutorialspoint.com/ruby/ruby_operators.htm。
|
是按位或運算符。 ||
是邏輯或。
主要區別是,如果您演示使用,則||
會短路,而左側爲true時不會評估右側。使用|
將始終評估雙方。
在這種情況下,可能並不重要 - 但是,如果操作者的雙方是計算價格昂貴,||
會更有效。
因此,在進行邏輯測試時(例如:「if」)使用||
幾乎總是更好,因爲這會更清楚地表達您的意圖,並且可能會更有效。
的|
運營商直接做位操作時,真是通常只適用於那些場景是比較有用的。
||
是邏輯OR運算符。
a | b
就像a.|(b)
。所以它的含義取決於a
的等級。
它做位或如果第一個操作Fixnum
:Fixnum#|
。
邏輯或如果第一操作數是true
或false
:TrueClass#|
,FalseClass#|
; ||
,|
產量相同的結果,如果這兩個操作數是true
/false
。
NilClass#|
,...
另一個不同之處:||
短路,而|
沒有。
例如:
def f1
p 'f1 called'
true
end
def f2
p 'f2 called'
true
end
p(f1 || f2)
# => "f1 called"
# true
p(f1 | f2)
# => "f1 called"
# "f2 called"
# true
1 || 2 # return first non-false/nil value.
# => 1
nil || 1
# => 1
1 | 2 # 0b01 | 0b10 => 0b11 = 3
# => 3
>> nil | 1
# => true
1 | nil
# => TypeError: nil can't be coerced into Fixnum
# from (irb):7:in `|'
# from (irb):7
# from C:/Ruby200-x64/bin/irb:12:in `<main>'
它是正確的說,|包括||的所有功能加上它也可以處理位? – User314159
@ User314159否 - 請參閱我的答案。 –