Ruby中的or和||操作符有什么区别?还是只是偏好?
当前回答
和/或用于控制流。
Ruby不允许这是有效的语法:
false || raise "Error"
然而,这是有效的:
false or raise "Error"
可以使用()实现第一个方法,但使用or是正确的方法。
false || (raise "Error")
其他回答
或者和||不一样。只使用||操作符代替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更流畅。
很容易理解为什么在这种情况下操作符具有“错误”(即相同)的优先级:它们永远不会同时出现在同一个表达式中。当它们一起出现时,你通常希望它们从左到右被计算。
这是运算符优先级的问题。
||优先级高于或。
所以,在这两者之间,你有其他的操作符,包括三元(?:)和赋值(=),所以你选择哪一个会影响语句的结果。
这是一个ruby操作符优先级表。
请看这个问题中使用and/&&的另一个例子。
同时,要注意可能发生的一些糟糕的事情:
a = false || true #=> true
a #=> true
a = false or true #=> true
a #=> false
前两个语句的值都为true,但第二个语句将a设置为false,因为=优先级低于||,但高于or。
只是补充一下mopoke的答案,这也是一个语义学的问题。或者被认为是一个很好的实践,因为它读起来比||要好得多。
输出false或true——>输出:false
输出假|| true——>打印:true
推荐文章
- Ruby中“or”和||的区别?
- 如何测试参数是否存在在轨道
- 静态隐式运算符
- 逗号运算符是做什么的?
- 三元算符在R中存在吗?
- 常见的Haskell操作符是否有可发音的名称?
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用
- 了解Gemfile。锁文件
- 如何确定一个数组是否包含另一个数组的所有元素
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- 最好的打印散列的方法
- Rails:dependent =>:destroy VS:dependent =>:delete_all
- 我可以在不包含Ruby模块的情况下调用实例方法吗?
- 如何将新项目添加到哈希