Very recently I’ve started to learn Ruby and I was experimenting with how Ruby calls methods on individual objects. However, the following code piece stuck me hard as I am not realising how it is actually working to
a = 4
b = -3
c = 2
puts a*b-c # operator precedence preserved
puts a . * b . - c # operator precedence not preserved
puts a.send(:*, b).send(:-, c) # operator precedence preserved
puts a-b*c # operator precedence preserved
puts a . - b . * c # operator precedence preserved
puts a.send(:-, b).send(:*, c) # operator precedence not preserved
Outputs:
-14
-20
-14
10
10
14
Can anyone able to explain how the operator precedence working here? I assumed all the three syntax in each part should reflect the same meaning. I apologise first if this question has been asked or explained already.
Operator precedence only applies when using operators. All of these examples:
are direct method calls, and happen to be in either the wrong order or the right order as compared to their corresponding operators.
Maybe parentheses make it more clear?