From: sawadatsuyoshi@... Date: 2019-08-30T06:09:39+00:00 Subject: [ruby-core:94678] [Ruby master Feature#8970] Array.zip and Array.product Issue #8970 has been updated by sawa (Tsuyoshi Sawada). osyo (manga osyo) wrote: > 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 `.:` ? Thank you for the suggestion, but that looks a little too long. It can also be written as: ```ruby :product.to_proc.(*arrays) # => [["a", "c", "d"], ["a", "c", "e"], ["b", "c", "d"], ["b", "c", "e"]] :zip.to_proc.(*arrays) # => [["a", "c", "d"], ["b", nil, "e"]] ``` But the proposal here seems to be favored more at least by mame-san (16102). ---------------------------------------- Feature #8970: Array.zip and Array.product https://bugs.ruby-lang.org/issues/8970#change-81284 * 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: