我想创建一个泛型方法,它将接受单个对象或集合,然后返回一个id的数组,并且从对象/集合中获取的实际id也将作为参数传入。
示例:
a = []
a << get_ids("car_id", some_object)
a << get_ids("user_id", some_collection)
def self.get_ids(id_name, obj)
# ??
end
这需要我知道的元编程,但我如何判断它是否是一个集合? 发送邮件以检查“id_name”是否为属性?
另外,我目前需要这种类型的功能,所以我想把它变成通用的,所以我可以重复使用它。它是否有任何重大的性能影响?
答案 0 :(得分:2)
def self.get_ids(id_name, obj)
if obj.is_a? Enumerable
obj.collect {|e| e.send(id_name) }
else
obj.send(id_name)
end
end
可替换地,
def self.get_ids(id_name, *objs)
objs.collect {|e| e.send(id_name) }
end
...
a << get_ids("car_id", some_object)
a << get_ids("user_id", *some_collection)