如何将 "values_at" 应用于 Ruby 中的数组数组?

How do I apply "values_at" to an array of arrays in Ruby?

我正在使用 Ruby 2.4。如果我想从我在另一个数组中指定的索引处的数组中提取某些元素,我可以这样做

2.4.0 :012 > arr.values_at(*indexes)
 => ["a", "e", "g"] 

但是如果我有一个数组数组,如何将上面的内容应用到数组数组中的每个数组?我试过这个

2.4.0 :014 > arr_of_arrays.map( &values_at(*indexes) )
NoMethodError: undefined method `values_at' for main:Object

我还希望结果是一个新对象,而不是就地修改原始对象。

您不能使用符号来处理参数。

arr_of_arrays.map { |a| a.values_at(*indexes) }

一种可能的解决方法是修改 Symbol class,但这种做法非常不受欢迎。

class Symbol
  def with(*args, &block)
    ->(caller, *rest) { caller.send(self, *rest, *args, &block) }
  end
end

这样就可以传递参数了