0

执行以下语句后,变量 'roses' 和 'violets' 将包含什么?

roses = "blue" && "red"
violets = "blue" and "red"

我期望roses =“red”,violets =“blue”,因为运算符的优先顺序是:

  1. &&
  2. =

但是 irb 将它们都显示为“红色”。有什么解释吗?

4

2 回答 2

3

不要混淆表达式的赋值和整体值。两行(作为整个表达式)都评估为“red”,因为那里没有短路,并且“red”是最后评估的表达式。你自己看:

roses = "blue" && "red" # => "red"
violets = "blue" and "red" # => "red"

roses # => "red"
violets # => "blue"

更进一步,让我们根据优先级放置一些括号

violets = "blue" and "red"

变成

(violets = "blue") and "red"

变成

("blue") and "red"

变成

"red"

这就是 `violets' 被赋予“蓝色”的方式,但整个表达式的计算结果为“红色”。

于 2013-07-01T12:04:43.610 回答
2
  • 请记住,&&and||运算符应用于布尔表达式评估和/或控制流评估。来源:-ruby-style-guide

  • &&、and、|| 或全部都是Ruby 中的短路运算符。or优先级低于||; andhas 的优先级低于&&。来源:-Boolean operators in various languages


也就是说,来源:Operator Precedence Table-

  • &&并且||具有比 更高的优先级。因此,=您的表达式roses = "blue" && "red"实际上变成 了roses = ("blue" && "red")

  • =具有比andand更高的优先级。因此,or您的表达式violets = "blue" and "red"实际上变为 (violets = "blue") and "red"

于 2013-07-01T13:00:39.997 回答