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/。

我不知道这是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!

并且优先级低于&&。

但对于一个不太谦虚的用户来说,如果它与其他优先级介于两者之间的操作符一起使用,例如赋值操作符,则可能会出现问题:

def happy?() true; end
def know_it?() true; end

todo = happy? && know_it? ? "Clap your hands" : "Do Nothing"

todo
# => "Clap your hands"

todo = happy? and know_it? ? "Clap your hands" : "Do Nothing"

todo
# => true

并且只检查第一个条件并给出结果 另一方面&&强检查两个条件并给出逻辑结果。