Issue #8970 has been updated by osyo (manga osyo).


If you use https://bugs.ruby-lang.org/issues/15955, you can write as follows.

```ruby
class UnboundMethod
  # apply or other name
  def apply(receiver, *args)
    bind(receiver).call(*args)
  end
end

arrays = [["a", "b"], ["c"], ["d", "e"]]

p Array.instance_method(:product).apply(*arrays)
# => [["a", "c", "d"], ["a", "c", "e"], ["b", "c", "d"], ["b", "c", "e"]]

p Array.instance_method(:zip).apply(*arrays)
# => [["a", "c", "d"], ["b", nil, "e"]]
```

Need a syntax to call `instance_method` like `.:` ?



----------------------------------------
Feature #8970: Array.zip and Array.product
https://bugs.ruby-lang.org/issues/8970#change-81262

* Author: sawa (Tsuyoshi Sawada)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
=begin
Most of the time when I use `Array#zip` or `Array#product`, I feel cumbursome that I have to take out the first array and pass it as a receiver. For example, if I have

    a = [[:a, :b, :c], [:d, :e, :f], [:g, :h, :i]]

I have to do something like this:

    a.first.zip(*a.drop(1)){...}
    a.first.product(*a.drop(1)){...}

Sometimes, the receiver (i.e., the first array) has significance, but most other times, that breaks asymmetry, making the code look ugly. 

I would be happy if we had `Array.zip` and `Array.product` in addition so that we can do it like this:

    Array.zip(*a){...}
    Array.product(*a){...}

=end




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>