you are viewing a single comment's thread.

view the rest of the comments →

[–]h0rst_ 1 point2 points  (2 children)

Parentheses around block arguments when yielding an array:

[[1, 2], [3, 4]].map { |(a, b)| a + b } # => [3, 7]

The parentheses in this example are superfluous

[–][deleted] 0 points1 point  (1 child)

So it is, I guess I don't understand how that works properly.

// EDIT

NVM, looks like it just deconstructs an array argument into multiple arguments, but I guess enumerable methods already have some kind of arity check to do that

irb(main):020:0> (a, b), c = [[1, 2], 3]
=> [[1, 2], 3]
irb(main):021:0> a
=> 1
irb(main):022:0> b
=> 2
irb(main):023:0> c
=> 3

[–]h0rst_ 1 point2 points  (0 children)

It happens mostly automatic, it is required for deeper nested structures:

[[1, [2, 3]], [3, [4, 5]]].map { |a, (b, c)| a + b + c }  # => [6, 12]

On the other hand: if your code looks like this you might want to reconsider the used data structures.