Ruby中的or和||操作符有什么区别?还是只是偏好?


当前回答

或者和||不一样。只使用||操作符代替or操作符。

这里有一些原因。:

Or运算符的优先级比||低。 Or的优先级比=赋值操作符低。 和和或具有相同的优先级,而&&的优先级高于||。

其他回答

或者和||不一样。只使用||操作符代替or操作符。

这里有一些原因。:

Or运算符的优先级比||低。 Or的优先级比=赋值操作符低。 和和或具有相同的优先级,而&&的优先级高于||。

正如其他人已经解释过的,唯一的区别是优先级。但是,我想指出的是,两者其实有两个不同之处:

And, or和not的优先级比&&,||和! 和和或具有相同的优先级,而&&的优先级高于||

一般来说,避免使用and, or and not,使用&&,|| and !代替。(例如,Rails核心开发人员拒绝使用关键字表单而不是操作符表单的补丁。)

它们存在的原因不是为了布尔公式,而是为了控制流。它们通过Perl著名的do_this或do_that习语进入Ruby,其中do_this在出现错误时返回false或nil,只有在出现错误时才执行do_that。(类似的,还有do_this和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更流畅。

很容易理解为什么在这种情况下操作符具有“错误”(即相同)的优先级:它们永远不会同时出现在同一个表达式中。当它们一起出现时,你通常希望它们从左到右被计算。

如果其中一个操作数为真,则or和||都求值为真。只有当第一个操作数为假时,才计算第二个操作数。

与and一样,or和||之间的唯一区别是它们的优先级。

为了让生活更有趣,and和or具有相同的优先级,而&&的优先级高于||。

只是补充一下mopoke的答案,这也是一个语义学的问题。或者被认为是一个很好的实践,因为它读起来比||要好得多。

输出false或true——>输出:false

输出假|| true——>打印:true