Single assignment
In the case of single assignment, Ruby evaluates the left-hand side before the right-hand side.
In the below example,
the last expression calls lists
, then data
, then []=
on the result of lists
.
lists = ['ruby', 'python', 'scala']
data = 'rust'
lists[1] = data
Before
Multiple assignments didn’t work this way. Let’s checkout the below example.
lists[1], tag.priority = data, num
Before Ruby 3.1, the above expression would be evaluated in the following order:
data
num
lists
[]=
called on the result oflists
tag
priority=
called on the result of thetag
After
Starting with Ruby 3.1, multiple assignments evaluation order has been made consistent with single assignment evaluation order.
lists[1], tag.priority = data, num
For the above expression, the left-hand side is evaluated before the right-hand side and the order is as below:
lists
tag
data
num
[]=
called on the result oflists
priority=
called on the result of thetag