希望我没有误解“duck typing”的含义,但是从我读过的内容来看,这意味着我应该根据对象如何响应方法而不是它是什么类型/类来编写代码。我可以用鸭子打字改进这种方法吗?
下面的代码:
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。
当然,我会接受任何其他建议,以改善这个代码,以及:)
甚至从来没有听说过“鸭打字”的。你在哪里遇到过这个问题? – 2008-10-16 17:27:00
@布莱恩,http://en.wikipedia.org/wiki/Duck_typing – 2008-10-16 17:29:41