Operator precedence of unary operators

我的未来我决定 提交于 2019-12-04 22:12:32

问题


Some information source on operator precedence like this says that unary operators like !, ~, +, - have higher precedence than assignment =. However, the following expressions are possible:

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

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

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

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

Considering these results, the only possible explanation I can think of is that these unary operator have lower precedence than the assignment. If that is the case, then it would mean that the information I mentioned above is wrong. Which is correct? Is there a different explanation?


回答1:


My programming ruby book (2nd edition) also lists unary operators as having higher precedence than assignment.

The unary operator IS being given highest precedence. The reason the line is parsed as ~ (a = 1) is because decomposing the line into valid syntax is of higher precedence than anything else, including using the simple variable 'a' as the expression the unary operator operates on.

If the ruby parser could have made something valid of the rest of the line, it would have used (~ a), but there is no valid rule than matches = something, only lvalue '=' rvalue.

You can regard "valid syntax" as the top priority, then simple values, constant and variable names and then the standard operators under that.



来源:https://stackoverflow.com/questions/21973537/operator-precedence-of-unary-operators

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!