Actions
Feature #19002
openExplicit splat for enumerator kwarg blocks
Status:
Open
Assignee:
-
Target version:
-
Description
I'm renovating some 2.x-era code that relied heavily on autosplat for block kwargs. As we all know, this throws an ArgumentError in Ruby 3:
ary = [
{ foo: 42, bar: 101 },
{ foo: 99, bar: 123 }
]
ary.map { |foo:, bar:| foo+bar } #=> ArgumentError
The nicest solution I could find so far is
module Enumerable
def splat
each { |arg| yield **arg }
end
end
and then
ary.map.splat { |foo:, bar:| foo+bar } #=> [143, 222]
and I present this as a feature suggestion.
Updated by inopinatus (Joshua GOODALL) over 2 years ago
- Description updated (diff)
Updated by inopinatus (Joshua GOODALL) over 2 years ago
- Description updated (diff)
Updated by inopinatus (Joshua GOODALL) over 2 years ago
I also had
module Enumerable
def **(proc) = each { |arg| proc[**arg] }
end
ary.map ** ->(foo:, bar:) { foo+bar } #=> [143, 222]
which is kinda fun, but not so readable.
Actions
Like0
Like0Like0Like0