Actions
Bug #14639
closedArray#map and lambda arity regression
Description
From ruby 2.4.1 onward the following script breaks (ArgumentError):
print_three = ->(a, b, c) { puts [a, b, c] }
arr = [[1, 2, 3]]
arr.map(&print_three)
This now requires explicit destructuring:
print_three = ->((a, b, c)) { puts [a, b, c] }
I guess this comes from a change in enum.c (line 45) from #9605 which seems to be similar.
While digging around I found https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/48193/diff that seems to address this very issue but I'm not sure.
If this is expected behavior feel free to disregard this.
First time posting to ruby trunk so I'm sorry If there is any Information missing.
Updated by marcandre (Marc-Andre Lafortune) over 6 years ago
- Subject changed from No #to_ary destructuring when mapping with lambda to Array#map and lambda arity change
Updated by marcandre (Marc-Andre Lafortune) over 6 years ago
- Subject changed from Array#map and lambda arity change to Array#map and lambda arity regression
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r63030.
array.c: yield blockarg in collect
- array.c (rb_ary_collect): yield in block argument semantics
always to splat array elements to lambda, for the backward
compatibility. [ruby-core:86362] [Bug #14639]
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
- Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: DONTNEED, 2.4: REQUIRED, 2.5: REQUIRED
Updated by lenwood (Paul Martensen) over 6 years ago
That was incredibly quick. Thanks @nobu (Nobuyoshi Nakada) and @marcandre (Marc-Andre Lafortune)! :)
Updated by nagachika (Tomoyuki Chikanaga) about 6 years ago
- Backport changed from 2.3: DONTNEED, 2.4: REQUIRED, 2.5: REQUIRED to 2.3: DONTNEED, 2.4: REQUIRED, 2.5: DONE
ruby_2_5 r64996 merged revision(s) 63030.
Updated by shyouhei (Shyouhei Urabe) almost 6 years ago
- Related to Bug #15285: lambda return behavior regression from #14639 added
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0