希望我没有误解“鸭子类型”的含义,但从我所读到的,这意味着我应该根据对象如何响应方法而不是它是什么类型/类来编写代码。
这是代码:
def convert_hash(hash)
if hash.keys.all? { |k| k.is_a?(Integer) }
return hash
elsif hash.keys.all? { |k| k.is_a?(Property) }
new_hash = {}
hash.each_pair {|k,v| new_hash[k.id] = v}
return new_hash
else
raise "Custom attribute keys should be ID's or Property objects"
end
end
我想要的是确保我最终得到一个散列,其中键是一个整数,表示 ActiveRecord 对象的 ID。我不是特别喜欢必须遍历哈希键两次all?
以确定是否需要取出 ID。
当然,我也会接受任何其他改进此代码的建议 :)