Ruby:比较之间有什么区别:“||”和“或”
可能重复:
Ruby:||之间的区别 和’或’
使用Ruby
||
和
or
是非常常见的做法,这使得知道两者之间的差异很重要,不幸的是我不确定。
首先,我的问题是如果以下假设是正确的:
EX1:
if @variable_1 || @variable_2 || @variable_3 do something else do nothing end
EX2:
if @variable_1 or @variable_2 or @variable_3 do something else do nothing end
所以在第一个例子中,如果任何变量为false,那么它将执行“什么都不做”
但是,对于第二个示例,将检查所有变量,如果一个为真,则执行“执行某些操作”。
总之使用“||” 如果你有一个需要检查的变量列表,如果其中一个返回false,那么一个标志会上升。 将第二个示例与变量列表一起使用,其中只需要一个变量才能继续执行所需的代码。
这些假设是否正确?
或者第二个例子检查所有变量,如果一个是真,那么它将执行“做某事”。
这是假判。
因此,您的假设是不正确的。
和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
以下是运算符优先级列表。
因此,如果您使用包含以下任何运算符的表达式,将会注意到真正的差异:
-
.. ...
– 范围(包含和独家) -
? :
? :
– 三元if-then-else -
= %= { /= -= += |= &= >>= <<= *= &&= ||= **=
- 分配 -
defined?
- 检查是否定义了指定的符号 -
not
- 逻辑否定 -
and
- 逻辑组成
也可能有其他人。
你可以把它们之间的差异看作是+
和*
之间的差异: ||
== *
和or
= +
。 这同样适用于和not
适用。
你应该注意这一点。
我个人更喜欢||
运算符作为其语义是很好理解和避免or
。
虽然在许多情况下它看起来像' or
更友好(参见我的代码示例),但即使是在微不足道的情况下,它也是错误的来源。
他们做同样的事情,但是or
优先级低于||
(事实上, or
其优先级低于大多数其他运营商)。
您对这些示例的结论是不正确的。
if true || true || false puts 'something' else puts 'nothing' end
此代码输出’something’,因为这是’逻辑或’操作的工作方式。 它读起来像“如果条件1或条件2或条件3中的至少一个是真的……”。
第二个例子完全相同,但仅仅是因为Ruby中的优先规则 。