8

像这样的一些关于运算符优先级的信息源说,像!, ~, +,这样的一元运算符比赋值-具有更高的=优先级。但是,以下表达式是可能的:

!a = true # => false (with warning)
a         # => true

~a = 1    # => -2
a         # => 1

+a = 1    # => 1
a         # => 1

-a = 1    # => -1
a         # => 1

考虑到这些结果,我能想到的唯一可能的解释是这些一元运算符的优先级低于赋值。如果是这样,那就意味着我上面提到的信息是错误的。哪个是对的?有不同的解释吗?

4

1 回答 1

2

我的红宝石编程书(第 2 版)还列出了一元运算符的优先级高于赋值。

一元运算符 IS 被赋予最高优先级。该行被解析为 ~ (a = 1) 的原因是因为将行分解为有效语法比其他任何东西都具有更高的优先级,包括使用简单变量 'a' 作为一元运算符操作的表达式。

如果 ruby​​ 解析器可以使该行的其余部分有效,它会使用 (~ a),但没有有效的规则比匹配 = something,只有 lvalue '=' rvalue。

您可以将“有效语法”视为最高优先级,然后是简单值、常量和变量名,然后是其下的标准运算符。

于 2014-02-24T17:58:18.933 回答