Ruby和Ruby之间的差异?

Ruby中&& and运算符有什么区别?

and &&相同,但优先级较低 。 他们都使用短路评估 。

警告:甚至比=更低的优先级,所以你要避免and总是

实际的区别是约束力,如果你没有做好准备,这可能会导致特殊的行为:

 foo = :foo bar = nil a = foo and bar # => nil a # => :foo a = foo && bar # => nil a # => nil a = (foo and bar) # => nil a # => nil (a = foo) && bar # => nil a # => :foo 

同样的事情适用于||or

Ruby风格指南比我能说的更好:

使用&& / || 用于布尔表达式,和/或用于控制流。 (经验法则:如果您必须使用外部圆括号,则使用错误的操作符。)

 # boolean expression if some_condition && some_other_condition do_something end # control flow document.saved? or document.save! 

||&&绑定在编程语言中布尔运算符期望的优先级( &&非常强, ||稍弱)。

andor具有较低的优先级。

例如,不像||or具有比=更低的优先级:

 > a = false || true => true > a => true > a = false or true => true > a => false 

同样,与&&不同,它的优先级也低于=

 > a = true && false => false > a => false > a = true and false => false > a => true 

更重要的是,不像&&||andor绑定相同的优先级:

 > !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 

弱绑定andor可能是有用的控制流的目的:请参阅http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/

优先级低于&&

但是对于一个不起眼的用户,如果与优先级在其间的其他运算符(例如赋值运算符)一起使用,则可能会出现问题。

例如

 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 

并且具有较低的优先级,我们大多使用它作为控制流修饰符如if

 next if widget = widgets.pop 

 widget = widgets.pop and next 

 raise "Not ready!" unless ready_to_rock? 

 ready_to_rock? or raise "Not ready!" 

我更喜欢使用但不是,因为如果是更易理解,所以我只是忽略

参考

在Ruby中使用“和”和“或”