gpt4 book ai didi

ruby - 定义方法 : How to dynamically create methods with arguments

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:03 24 4
gpt4 key购买 nike

我想为 find_by 功能创建一堆方法。我不想一遍又一遍地写同样的东西,所以我想使用元编程。

假设我想创建一个按名称查找的方法,接受名称作为参数。我该怎么做?我过去曾使用过 define_method,但我没有为该方法采用的任何参数。这是我的(坏的)方法

["name", "brand"].each do |attribute|
define_method("self.find_by_#{attribute}") do |attr_|
all.each do |prod|
return prod if prod.attr_ == attr_
end
end
end

有什么想法吗?提前致谢。

最佳答案

如果我正确理解你的问题,你想要这样的东西:

class Product
class << self
[:name, :brand].each do |attribute|
define_method :"find_by_#{attribute}" do |value|
all.find {|prod| prod.public_send(attribute) == value }
end
end
end
end

(我假设 all 方法返回一个 Enumerable。)

以上或多或少等同于定义两个这样的类方法:

class Product
def self.find_by_name(value)
all.find {|prod| prod.name == value }
end

def self.find_by_brand(value)
all.find {|prod| prod.brand == value }
end
end

关于ruby - 定义方法 : How to dynamically create methods with arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38233060/

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