Ruby 3.1 Left-to-Right Assignment Order

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:

  1. data
  2. num
  3. lists
  4. []= called on the result of lists
  5. tag
  6. priority= called on the result of the tag

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:

  1. lists
  2. tag
  3. data
  4. num
  5. []= called on the result of lists
  6. priority= called on the result of the tag

Need expert help with Ruby?

Saeloun is a Rails Foundation Contributing Member helping teams modernize, upgrade, scale, and maintain production Rails applications.

Our Expertise

  • Rails contributors
  • 500+ Technical Articles
  • Production Rails consulting
  • Performance Optimization

Services

  • Rails application development
  • Code Audits
  • Rails upgrades
  • Team Augmentation

Need help on your Ruby on Rails or React project?

Join Our Newsletter