Ruby 2.7 has just been released (Dec 25) as the tradition is. That’s the last minor version before 3.0 which is going to be released on Dec 25, 2020. In one year.
Here are a few new features that caught my eye.
Array intersection
There are a couple of set methods you can use with an array:
Array#union
Array#difference
Union helps you join two arrays together:
[1, 2, 3].union([4, 5]) => [1, 2, 3, 4, 5, 6]
Difference returns an array with all the elements of the first array excluding the elements of the second array:
[1, 2, 3].difference([2, 3]) => [1]
Ruby 2.7 gives us Array#intersection
which returns an array with the common elements between the first and the second one:
[1, 2, 3].intersection([2, 3, 4]) => [2, 3]
Named parameters
When you are iterating over an array, for example, you have to name the parameter that references the current element in the iteration in order to use it in the block:
[1, 2, 3].each { |n| puts "#{n}" } 1 2 3
With named parameters in Ruby 2.7, you can skip naming the parameter and use _1
instead:
[1, 2, 3].each { puts "#{_1}" } 1 2 3
Why? I don’t know. Convenience?
Enumerable#filter_map
If you want to filter and map an array, for example, at the same time now you can:
[1, 2, 3, 4].filter_map { _1 ** 4 if _1.even? } => [16, 256]
You will notice I am also using named parameters in the example above.
Pattern matching
An experimental feature in Ruby 2.7 is pattern matching. The way to do it is using the in
keyword:
[1, 2, 3] in [a, b, c] => nil a => 1 b => 2 c => 3
As you can see, Ruby matched 1, 2, 3
to a, b, c
because there is a pattern it can recognize there. So it created three assignments to a, b, c
with the equivalent values. There is much more to say about pattern matching, but it’s out of the scope of this article. You can check Pattern matching – New feature in Ruby 2.7 – Speaker Deck.
I hope you enjoy the new features. You can read Ruby 2.7.0 Released for more details.