2013-10-23 150 views
1

我知道這意味着或|有什麼區別? vs. ||

true || false 
=> true 

,但有一天,我無意中用一條垂直線,而不是發現我的代碼仍然工作。

true | false 
=> true 

false | false 
=> false 

那麼這些差異是什麼?和||?它們是否相同?

回答

2

|按位或運算符。 ||邏輯或

主要區別是,如果您演示使用,則||會短路,而左側爲true時不會評估右側。使用|將始終評估雙方。

在這種情況下,可能並不重要 - 但是,如果操作者的雙方是計算價格昂貴,||會更有效。

因此,在進行邏輯測試時(例如:「if」)使用||幾乎總是更好,因爲這會更清楚地表達您的意圖,並且可能會更有效。

|運營商直接做位操作時,真是通常只適用於那些場景是比較有用的。

2

||是邏輯OR運算符。


a | b就像a.|(b)。所以它的含義取決於a的等級。

它做位或如果第一個操作FixnumFixnum#|

邏輯或如果第一操作數是truefalseTrueClass#|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>' 
相關問題