2017-02-01 7 views
0

Я использую Ruby 2.4. Если я хочу, чтобы извлечь определенные элементы из массива в индексах указываю в другой массив, я могу сделатьКак применить «values_at» к массиву массивов в Ruby?

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 

Также я хотел бы, чтобы результат был новым объектом, в отличие от изменения исходного объекта на месте.

+0

Исправлены ли '* индексы? –

ответ

1

Вы не можете использовать символ для proc с параметром.

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

Одним из возможных обходного пути является модификация Symbol класса, но эта практика весьма неодобрительно.

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

С помощью этого вы можете передать параметры.

+0

Если вы действительно любите этот патч, вы можете загрузить его с уточнениями, тогда он не будет нахмуриться столько же. –

+0

Ницца 'Символ # с трюком! –