“或”与||的区别 在Ruby中?
or
和||
什么区别? Ruby中的运算符? 还是只是偏好?
这是运营商的优先事项。
||
比or
更高的优先级。
所以,在这两者之间你有其他的操作符,包括三元( ? :
:)和赋值( =
),所以你select哪一个可以影响语句的结果。
这是一个ruby运算符优先级表 。
查看这个问题的另一个例子使用and
/ &&
。
另外,要注意一些可能发生的令人讨厌的事情:
a = false || true => true a => true a = false or true => true a => false
前面的两个语句都计算为true
,但是第二个语句将a
设置为false
因为=
precedence低于||
但高于or
。
正如其他人已经解释的, 唯一的区别是优先。 不过,我想指出两者其实有两点不同:
-
and
,or
not
比&&
,||
更低的优先级 和!
-
and
和or
具有相同的优先级,而&&
优先于||
总体而言,避免使用and
, or
not
使用&&
, ||
是很好的风格 和!
代替。 (例如,Rails核心开发人员拒绝使用关键字表单而不是运营商表单的补丁。)
他们之所以存在的原因,不是布尔公式,而是控制stream。 他们通过Perl着名的do_this or do_that
成语进入Ruby,其中do_this
返回false
或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
有时候,这可以使控制stream动比使用if
或unless
更stream利一点。
很容易看出为什么在这种情况下,操作员具有“错误的”(即相同的)优先级:无论如何,它们从不在同一个expression中一起出现。 当他们一起出现时,你通常希望他们被评估从左到右。
和/或用于控制stream程。
Ruby不会允许这是有效的语法:
false || raise "Error"
但是这是有效的:
false or raise "Error"
你可以用()来做第一个工作,但是使用or
是正确的方法。
false || (raise "Error")
puts false or true
打印:错误
puts false || true
打印:真实
尤达:小心你一定是。
或者与||不一样
只使用|| 运营商而不是运营商。
理由:
- 或运算符的优先级低于||
- 或者具有比赋值运算符更低的优先级
- 和和或具有相同的优先级,而&优先于||
我使用这些操作符的方式:
||, &&
是布尔逻辑。 or, and
用于控制stream程。 例如
do_smth if may_be || may_be
do_smth if may_be || may_be
– 我们在这里评估病情
do_smth or do_smth_else
– 我们定义工作stream程,这相当于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 文档 )
“或”和“||” 如果任一操作数为真,则评估为真。 只有第一个操作数是假的,他们才会评估第二个操作数。
与“和”一样,“或”与“||”之间的唯一区别 是他们的优先。
为了使生活有趣,“和”和“或”具有相同的优先权,而“&&”比“||”具有更高的优先权。
只是为了增加mopoke的答案,这也是一个语义问题。 or
认为是一个好的做法,因为它读得比||
好得多 。