Ruby:比较之间有什么区别:"||" 和"或"

the*_*gah 6 ruby

可能重复:
Ruby:||之间的区别 和'或'

使用Ruby

||
Run Code Online (Sandbox Code Playgroud)

or 
Run Code Online (Sandbox Code Playgroud)

是非常常见的做法,这使得了解两者之间的区别很重要,不幸的是我不确定.

首先我的问题是如果以下假设是正确的:

EX1:

if @variable_1 || @variable_2 || @variable_3 
  do something 
else
  do nothing
end
Run Code Online (Sandbox Code Playgroud)

EX2:

if @variable_1 or @variable_2 or @variable_3
  do something 
else
  do nothing
end
Run Code Online (Sandbox Code Playgroud)

所以在第一个例子中,如果任何变量为false,那么它将执行"什么都不做"

但是,对于第二个示例,将检查所有变量,如果一个为真,则执行"执行某些操作".

总之使用"||" 如果你有一个需要检查的变量列表,如果其中一个返回false,那么一个标志会上升.将第二个示例与变量列表一起使用,其中只需要一个变量才能继续执行所需的代码.

这些假设是否正确?

Dmy*_*iak 14

或者第二个例子检查所有变量,如果一个是真,那么它将执行"做某事".

这是假判.

因此,您的假设是不正确的.

无论or||做同样的事情.

主要区别在于or优先级低于||.所以你应该注意更复杂的评估:

# Simple cases are not confusing
false || true # true
false or true # true

# This is more complex
a = false || true # a=true
a = false or true # a=false

# Also similarly as 1 + 2*3 returns 7, the following returns true:
false or false||true # true
# BUT! THIS IS IMPORTANT!
a = false or false||true   # a=false
a = (false or false||true) # a=true
Run Code Online (Sandbox Code Playgroud)

以下是运算符优先级列表.

因此,如果您使用包含以下任何运算符的表达式,将会注意到真正的差异:

  • .. ... - 范围(包括和独家)
  • ? : - 三元if-then-else
  • = %= { /= -= += |= &= >>= <<= *= &&= ||= **= - 作业
  • defined? - 检查是否定义了指定的符号
  • not - 逻辑否定
  • and - 逻辑构成

也可能有其他人.

你可以对那些之间不同的区别的东西+*:||== *or= +.这同样适用于andnot.

你应该注意这一点.

我个人更喜欢||运算符,因为它的语义很好理解并避免使用or.

虽然or在许多情况下(看到我的代码示例)感觉更友好,但即使是在琐碎的情况下,它也是错误的来源.