From: eregontp@... Date: 2019-06-28T10:53:56+00:00 Subject: [ruby-core:93407] [Ruby trunk Bug#15708] Implicit numbered argument decomposes an array Issue #15708 has been updated by Eregon (Benoit Daloze). Assignee set to matz (Yukihiro Matsumoto) Status changed from Rejected to Assigned IMHO, this is very much a bug, and the single reason I heard for it seems largely outweigh by being non-intuitive and breaking code. @nobu BTW, that reason has not been written here yet and should be, please write it down. IMHO using @N will always be surprising for debugging since it changes arity. So I reopen this and assign to matz. I believe we all agree that if we accept only a single unnamed parameter, that it should be the same as `{ |x| }`. I don't think that rule should change with multiple unnamed parameters. TBH, I don't think this behavior is rational language design (taking the semantics of a almost-never-used syntax (because it's dangerous) for a new syntactic sugar), but it's just my opinion. ---------------------------------------- Bug #15708: Implicit numbered argument decomposes an array https://bugs.ruby-lang.org/issues/15708#change-78948 * Author: sawa (Tsuyoshi Sawada) * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: * ruby -v: 2.7.0dev * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- In the following, `@1` refers to the entire item iterated: ```ruby a = [1, 2, 3] a.map{|x| x} # => [1, 2, 3] a.map{@1} # => [1, 2, 3] ``` whereas in the following, `@1` refers to the first item achieved by decomposing the item iterated, behaving the same as `x` given by `|(x)|` rather than by `|x|`: ```ruby a = [[1], [2], [3]] a.map{|x| x} # => [[1], [2], [3]] a.map{|(x)| x} # => [1, 2, 3] a.map{@1} # => [1, 2, 3] ``` Is this intended? ---Files-------------------------------- single-implicit-arg-no-destructure.diff (471 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: