“或”与||的区别 在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

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

  1. andor not&&||更低的优先级 和!
  2. andor具有相同的优先级,而&&优先于||

总体而言,避免使用andor not使用&&||是很好的风格 和! 代替。 (例如,Rails核心开发人员拒绝使用关键字表单而不是运营商表单的补丁。)

他们之所以存在的原因,不是布尔公式,而是控制stream。 他们通过Perl着名的do_this or do_that成语进入Ruby,其中do_this返回falsenil如果有错误,则只有 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动比使用ifunless更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认为是一个好的做法,因为它读得比||好得多 。