希望我沒有誤解「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