Ruby 逻辑运算符
Ruby logical operator
我不知道这里有什么不同。
a = 24
b = 60
comp1 = a > 42 or b == 60
comp1 # => false
comp2 = (a > 42 or b == 60)
comp2 # => true
有人可以解释一下发生了什么以及为什么 return 值不同吗?
这与运算符优先级有关。 or
的优先级低于 =
,因此
comp1 = a > 42 or b == 60
执行为
(comp1 = a > 42) or (b == 60)
您需要使用括号强制执行优先顺序。或者成为一名优秀的 ruby 编码员并且从不*使用 and/or
(改为使用 &&
/||
)
* 永远不会,除非你知道自己在做什么。一个经验法则是:&&/||对于逻辑操作,and/or - 对于控制流。
这是由于运算符绑定的强度,因为运算符应用于 a very particular order。
or
很松散,优先级最低。 ||
运算符非常强大,与之相反。请注意,table ||
是如何出现在 =
之前,而 or
出现在之后?这有影响。
根据你的例子:
comp1 = a > 42 or b == 60
Ruby 对此的解释如下:
(comp1 = (a > 42)) or (b == 60)
因此,整个语句 returns true
但 comp1
被分配 false
因为它没有捕获全部内容。
所以要解决这个问题,只需使用强绑定版本:
comp1 = a > 42 || b == 60
# => true
在Ruby中,赋值(=
),比写的or
运算符有更高的优先级,所以第一行解释为:
(comp1 = a > 42) or (b == 60)
这意味着comp1
被赋予了a > 42
的值,这显然是错误的。第二个表达式中的括号解决了这个问题。
通常,在Ruby中,您使用||
代替or
,同样,&&
代替and
。
我不知道这里有什么不同。
a = 24
b = 60
comp1 = a > 42 or b == 60
comp1 # => false
comp2 = (a > 42 or b == 60)
comp2 # => true
有人可以解释一下发生了什么以及为什么 return 值不同吗?
这与运算符优先级有关。 or
的优先级低于 =
,因此
comp1 = a > 42 or b == 60
执行为
(comp1 = a > 42) or (b == 60)
您需要使用括号强制执行优先顺序。或者成为一名优秀的 ruby 编码员并且从不*使用 and/or
(改为使用 &&
/||
)
* 永远不会,除非你知道自己在做什么。一个经验法则是:&&/||对于逻辑操作,and/or - 对于控制流。
这是由于运算符绑定的强度,因为运算符应用于 a very particular order。
or
很松散,优先级最低。 ||
运算符非常强大,与之相反。请注意,table ||
是如何出现在 =
之前,而 or
出现在之后?这有影响。
根据你的例子:
comp1 = a > 42 or b == 60
Ruby 对此的解释如下:
(comp1 = (a > 42)) or (b == 60)
因此,整个语句 returns true
但 comp1
被分配 false
因为它没有捕获全部内容。
所以要解决这个问题,只需使用强绑定版本:
comp1 = a > 42 || b == 60
# => true
在Ruby中,赋值(=
),比写的or
运算符有更高的优先级,所以第一行解释为:
(comp1 = a > 42) or (b == 60)
这意味着comp1
被赋予了a > 42
的值,这显然是错误的。第二个表达式中的括号解决了这个问题。
通常,在Ruby中,您使用||
代替or
,同样,&&
代替and
。