假设我有类(class):
class Car
attr_accessor :brand, :color
def initialize(br, col)
@brand = br
@color = col
end
end
first_car = Car.new 'Mercedes', 'Yellow'
second_car = Car.new 'Jaguar', 'Orange'
third_car = Car.new 'Bentley', 'Pink'
array_of_cars = [first_car, second_car]
所以,我们的想法是在 Array 类中定义一个方法 to_proc
,这样就可以发生:
array_of_cars.map(&[:brand, :color]) #=> [['Mercedes', 'Yellow'], ['Jaguar', 'Orange'], ['Bentley', 'Pink']]
或者我怎么能以某种方式做这样的事情:
[:brand, :color].to_proc.call(first_car) #=> ['Mercedes', 'Yellow']
标准的 Symbol#to_proc
或多或少是一个 e.send(self)
调用,您只想发送
数组中的每个元素都充满了符号,所以只需像这样准确地说出:
class Array
def to_proc
proc { |e| self.map { |m| e.send(m) } }
end
end
我可能不会为此修补 Array,如果我想要更易于阅读的东西,我只会使用本地 lambda:
brand_and_color = lambda { |e| [:brand, :color].map { |s| e.send(s) } }
array_of_cars.map(&brand_and_color)
我是一名优秀的程序员,十分优秀!