Ruby中or和||操作符的区别是什么?还是只是偏好?
or
||
这是运算符优先级的问题。
||的优先级比or高。
因此,在这两者之间还有其他操作符,包括三元操作符(? :)和赋值操作符(=),因此选择哪一个操作符都会影响语句的结果。
? :
=
这是一个Ruby操作符优先级表。
另一个使用and/&&的例子见这个问题。
and
&&
同时,要注意可能发生的一些糟糕的事情:
a = false || true #=> true a #=> true a = false or true #=> true a #=> false
前两个语句的值都是true,但第二个语句将a设置为false,因为=的优先级低于||,但高于or。
true
a
false
只是补充一下mopoke的答案,这也是一个语义学的问题。or被认为是一个很好的实践,因为它比||读起来更好。
正如其他人已经解释的那样,只有的差异是优先级。然而,我想指出这两者之间实际上存在两个差异:
not
!
一般来说,避免使用and, or和not,而使用&&, ||和!是很好的风格。(例如,Rails核心开发人员拒绝使用关键字表单而不是操作符表单的补丁。)
它们存在的原因不是为了布尔公式,而是为了控制流。它们通过Perl著名的do_this or do_that习语进入Ruby,其中,如果出现错误,do_this返回false或nil,而只有这样则执行do_that。(类似的,还有do_this and then_do_that习语。)
do_this or do_that
do_this
nil
do_that
do_this and then_do_that
例子:
download_file_via_fast_connection or download_via_slow_connection download_latest_currency_rates and store_them_in_the_cache
有时,这可以使控制流比使用if或unless更流畅。
if
unless
很容易理解为什么在这种情况下操作符具有“错误”(即相同)的优先级:它们永远不会同时出现在同一个表达式中。而当它们做一起出现时,你通常想要它们被简单地从左到右求值。
or和||不一样。只使用||操作符而不是or操作符。
这里有一些原因。:
如果任意一个操作数为真,or和||的值都为真。只有当第一个操作数为假时,才计算第二个操作数。
与and一样,or和||之间的唯一区别是它们的优先级。
为了让生活更有趣,and和or具有相同的优先级,而&&的优先级高于||。
and/or用于控制流。
Ruby不允许这是有效的语法:
false || raise "Error"
然而,这是有效的:
false or raise "Error"
你可以使用()实现第一个方法,但是使用or才是正确的方法。
()
false || (raise "Error")
我使用这些操作符的方式:
||, &&用于布尔逻辑。or, and为控制流。如。
||, &&
or, and
do_smth if may_be || may_be——我们在这里计算条件
do_smth if may_be || may_be
do_smth or do_smth_else——我们定义了工作流,这相当于 do_smth_else unless do_smth < / p >
do_smth or do_smth_else
do_smth_else unless do_smth
举个简单的例子:
> puts "a" && "b" b > puts 'a' and 'b' a
Rails中一个著名的成语是render and return。这是return if render的快捷方式,而render && return将不起作用。更多信息请参见Rails文档中的“避免双重渲染错误”。
render and return
return if render
render && return
puts false or true——>打印:假
puts false or true
puts false || true——>打印:真正的
puts false || true