Project

General

Profile

Actions

Bug #14639

closed

Array#map and lambda arity regression

Bug #14639: Array#map and lambda arity regression

Added by lenwood (Paul Martensen) over 7 years ago. Updated about 7 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:86362]

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.


Related issues 1 (0 open1 closed)

Related to Ruby - Bug #15285: lambda return behavior regression from #14639ClosedActions

Updated by marcandre (Marc-Andre Lafortune) over 7 years ago Actions #1

  • 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 7 years ago Actions #2 [ruby-core:86364]

  • Subject changed from Array#map and lambda arity change to Array#map and lambda arity regression

Good checking.

Indeed, #9605 introduced lambda arity relaxation and this announced in the 2.2 NEWS.

Looks like a regression was introduced by #12705?

Updated by nobu (Nobuyoshi Nakada) over 7 years ago Actions #3

  • 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 7 years ago Actions #4

  • Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: DONTNEED, 2.4: REQUIRED, 2.5: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) about 7 years ago Actions #6 [ruby-core:89371]

  • 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 7 years ago Actions #7

  • Related to Bug #15285: lambda return behavior regression from #14639 added
Actions

Also available in: PDF Atom