Ruby中&&和和操作符的区别是什么?
当前回答
||和&&与编程语言中布尔运算符的优先级绑定(&&非常强,||略弱)。
和和的优先级更低。
例如,不像||,or的优先级比=低:
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
类似地,与&&不同,and的优先级也低于=:
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
更重要的是,不像&&和||,和和或绑定具有相同的优先级:
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
弱绑定的and和or对于控制流的目的可能很有用:参见http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/。
其他回答
和&&相同,但优先级更低。它们都使用短路计算。
警告:and even的优先级比=低,所以你通常要避免使用and。何时使用和应该使用的例子可以在Rails指南“避免双重渲染错误”下找到。
我不知道这是Ruby的意图还是一个bug,但是试试下面的代码。这段代码在Ruby 2.5.1版本和Linux系统上运行。
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
并且只检查第一个条件并给出结果 另一方面&&强检查两个条件并给出逻辑结果。
Ruby风格指南说得比我还好:
使用&&/||作为布尔表达式,和/或控制流。(规则 拇指:如果你必须使用外括号,你就用错了 运营商)。
# boolean expression
if some_condition && some_other_condition
do_something
end
# control flow
document.saved? or document.save!
并且具有较低的优先级,通常我们将其用作控制流修饰符,例如:
next if widget = widgets.pop
就变成了
widget = widgets.pop and next
或:
raise "Not ready!" unless ready_to_rock?
就变成了
ready_to_rock? or raise "Not ready!"
我更喜欢用if而不是and,因为if更容易理解,所以我忽略and和or。
更多信息请参考“Using”和“and”或“in Ruby”。
推荐文章
- 三元算符在R中存在吗?
- 常见的Haskell操作符是否有可发音的名称?
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用
- 了解Gemfile。锁文件
- 如何确定一个数组是否包含另一个数组的所有元素
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- 最好的打印散列的方法
- Rails:dependent =>:destroy VS:dependent =>:delete_all
- 我可以在不包含Ruby模块的情况下调用实例方法吗?
- 如何将新项目添加到哈希
- 测试一个Ruby类是否是另一个类的子类
- PHP中的双not(!!)操作符
- 什么时候使用Struct vs. OpenStruct?
- 数组到哈希Ruby