1

我正在为 Ruby 1.8 和 1.9 阅读一本名为“The Ruby Programming Language”的书。这本书说 if-operator 的优先级低于 assignment-operator。如果这是真的,那么我不明白这个表达式是如何工作的:

x = 5 if false

如果赋值运算符具有更高的优先级,那么它应该在 if 运算符之前执行。因此,在执行之前应将 5 分配给 x if false

我误解了优先级吗?

4

2 回答 2

1

较高的赋值优先级意味着您的表达式计算结果为(x = 5) if false,而不是x = (5 if false)。请注意,这也是一个完全有效的表达式。

是否执行每个特定子句由语言规则决定。例如,在三元运算符a ? b : c中,只有borc将被执行,但不会同时执行。

编辑
关于差异。

x = (5 if false)中,首先处理分配。但要完成它,我们需要赋值的左部分,即nil,因为5 if false计算结果为nil。所以,表达式等价于x = nil

(x = 5) if false中,首先处理条件运算符。根据其规则,我们首先必须评估条件 ( false)。既然是false,那就没什么可做的了,评估的结果是nil

希望这很清楚。

于 2010-12-15T14:41:54.880 回答
0

因为<expr> if <condition>不是一个表达式。它是 Ruby 的一种特殊语法糖。它的工作原理就像:

if <condition>
    <expr>
end

其中,显然,<expr>必须仅在之后评估,<condition>因为<condition>can be false

于 2010-12-15T14:46:50.863 回答