运算符优先级的一些信息来源like this表示 !
、~
、+
、-
等一元运算符具有更高优先级比赋值 =
。但是,以下表达式是可能的:
!a = true # => false (with warning)
a # => true
~a = 1 # => -2
a # => 1
+a = 1 # => 1
a # => 1
-a = 1 # => -1
a # => 1
考虑到这些结果,我能想到的唯一可能的解释是这些一元运算符的优先级低于赋值。如果是这样的话,那就意味着我上面提到的信息是错误的。哪个是正确的?有不同的解释吗?
最佳答案
我的编程 ruby 书(第 2 版)也将一元运算符列为具有比赋值更高的优先级。
一元运算符被赋予最高优先级。该行被解析为 ~ (a = 1) 的原因是因为将该行分解为有效语法比其他任何事情都具有更高的优先级,包括使用简单变量“a”作为一元运算符所操作的表达式。
如果 ruby 解析器可以使行的其余部分有效,它会使用 (~ a),但没有有效规则比 matches = something, only lvalue '=' rvalue。
您可以将“有效语法”视为最高优先级,其次是简单值、常量和变量名,然后是其下的标准运算符。
关于ruby - 一元运算符的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973537/