【发布时间】:2008-10-16 17:15:38
【问题描述】:
希望我没有误解“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。
当然,我也会接受任何其他改进此代码的建议 :)
【问题讨论】:
-
以前从未听说过“鸭子打字”。你是从哪里看到的?
标签: ruby-on-rails ruby refactoring duck-typing