gpt4 book ai didi

ruby - 如何在 Array 中定义方法 to_proc 以便我可以在特定情况下使用它

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:46 25 4
gpt4 key购买 nike

假设我有类(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)

关于ruby - 如何在 Array 中定义方法 to_proc 以便我可以在特定情况下使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com