use*_*702 1 ruby overriding proc
让我们说我有班级:
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]
Run Code Online (Sandbox Code Playgroud)
因此,我们的想法是to_proc在类Array中定义一个方法,这样就可以实现:
array_of_cars.map(&[:brand, :color]) #=> [['Mercedes', 'Yellow'], ['Jaguar', 'Orange'], ['Bentley', 'Pink']]
Run Code Online (Sandbox Code Playgroud)
或者我怎么能以某种方式做这样的事情:
[:brand, :color].to_proc.call(first_car) #=> ['Mercedes', 'Yellow']
Run Code Online (Sandbox Code Playgroud)
标准Symbol#to_proc或多或少是一个e.send(self)调用,你只想要send一个充满符号的数组到每个元素,所以只需用这样的东西说:
class Array
def to_proc
proc { |e| self.map { |m| e.send(m) } }
end
end
Run Code Online (Sandbox Code Playgroud)
我可能不会为此修补数组,如果我想要更容易理解的内容,我只使用本地lambda:
brand_and_color = lambda { |e| [:brand, :color].map { |s| e.send(s) } }
array_of_cars.map(&brand_and_color)
Run Code Online (Sandbox Code Playgroud)