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

标签 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

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

最佳答案

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

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

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

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

关于ruby - 一元运算符的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973537/

相关文章:

ruby-on-rails - 如何使用 haml 将 Font Awesome 添加到 rails 上的 link_to 方法?

lua - swig 包装变量的基本赋值失败

javascript - 如何以编程方式添加到可变嵌套对象?

c - 指针运算 :++*ptr or *ptr++?

c++ - C++ 中的赋值运算符返回右值还是左值?

ruby - 如何干净地验证用户输入是否是 Ruby 中的整数?

ruby - 在实例方法中使用 mixin 方法

dart - 在像 Dart 这样的现代语言中,传递引用的真正含义是什么?

c++ - 在函数参数未定义行为中使用赋值运算符吗?

ruby-on-rails - Rails 状态代码错误和呈现错误页面的自动处理