一元运算符的运算符优先级

时间:2014-02-23 19:44:37

标签: ruby variable-assignment operator-precedence unary-operator

有关运算符优先级like this的一些信息来源说,!~+-等一元运算符更高优先级而不是赋值=。但是,可以使用以下表达式:

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我的编程ruby书(第2版)还列出了一元运算符具有比赋值更高的优先级。

一元运算符IS被赋予最高优先级。将行解析为〜(a = 1)的原因是因为将行分解为有效语法的优先级高于其他任何内容,包括使用简单变量“a”作为一元运算符操作的表达式。

如果ruby解析器可以使该行的其余部分有效,那么它将使用(~a),但没有有效的规则而不是matches = something,只有lvalue'='rvalue。

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