我知道这意味着或
true || false
=> true
但是前几天我不小心使用了一条垂直线,发现我的代码仍然有效。
true | false
=> true
false | false
=> false
那么这些之间的区别是什么和||?它们是等价的吗?
答案 0 :(得分:3)
|是按位OR运算符。 ||是逻辑OR运算符。
请参阅此处以获取有关两个运营商的说明:http://www.tutorialspoint.com/ruby/ruby_operators.htm。
答案 1 :(得分:2)
|
是按位OR 运算符。 ||
逻辑OR 。
当您演示时使用的主要区别是||
将短路,而当左侧为真时,不会评估右侧。使用|
将始终评估双方。
在这种情况下,这可能无关紧要 - 但如果运算符的两边计算成本很高,||
会更有效率。
因此,在进行逻辑测试时(例如:“if”)使用||
几乎总是更好,因为这会更清楚地表达您的意图,并且可能更有效。
|
运算符在直接进行位操作时更有用,而且通常只适用于那些场景。
答案 2 :(得分:2)
||
是逻辑OR运算符。
a | b
与a.|(b)
类似。所以它的含义取决于a
的类。
如果第一个操作数为Fixnum
:Fixnum#|
,则按位OR;
逻辑OR如果第一个操作数是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>'