Precedence: Difference between revisions
>JulienDethurens →Discussion: The precedence "shema", which was taken from pil, was incomplete. Replaced it by the one in the Reference Manual and did some other changes. :P |
>JulienDethurens No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
== Introduction == | == Introduction == | ||
Operators take | [[Operators]] take precedence over another in a certain order in Lua. This can affect the outcome of your formulae. | ||
== Discussion == | == Discussion == | ||
Line 21: | Line 19: | ||
^ | ^ | ||
</pre> | </pre> | ||
As usual, | |||
you can use parentheses to change the precedences of an expression. | As usual, you can use parentheses to change the precedences of an expression. | ||
The concatenation ('..') and exponentiation ('^') | The concatenation ('..') and exponentiation ('^') | ||
operators are right associative. | operators are right associative. | ||
Line 30: | Line 28: | ||
For example: | For example: | ||
{{code|=print(-3^2)}} | |||
Will result in: -9 | Will result in: -9 | ||
Line 37: | Line 35: | ||
Notice that if we explicitly use parentheses, however, the outcome is different: | Notice that if we explicitly use parentheses, however, the outcome is different: | ||
{{code|=print((-3)^2)}} | |||
Will result in: 9 | Will result in: 9 | ||
Here's another example: | Here's another example: | ||
{{code|=print(3 .. 2^2)}} | |||
Will result in: 34 | Will result in: 34 | ||
Line 50: | Line 48: | ||
Finally, | Finally, | ||
{{code|=print (0 < 1 and 2 <= 7)}} | |||
Will result in: true | Will result in: true |
Latest revision as of 01:59, 28 March 2012
Introduction
Operators take precedence over another in a certain order in Lua. This can affect the outcome of your formulae.
Discussion
Here is what the Lua 5.1 Reference Manual says about operator precedence:
Operator precedence in Lua follows the table below, from lower to higher priority:
or and < > <= >= ~= == .. + - * / % not # - (unary) ^As usual, you can use parentheses to change the precedences of an expression. The concatenation ('..') and exponentiation ('^') operators are right associative. All other binary operators are left associative.
For example:
print(-3^2)
Will result in: -9
Because 3 is raised (^) to the second power first and then the sign of 9 is changed from positive to negative.
Notice that if we explicitly use parentheses, however, the outcome is different:
print((-3)^2)
Will result in: 9
Here's another example:
print(3 .. 2^2)
Will result in: 34 Notice that 2^2 is evaluated (2^2=4) before .. , giving us the value of 34.
Finally,
print (0 < 1 and 2 <= 7)
Will result in: true
Notice that the inequalities are evaluated before the and.