Hy vọng rằng tôi đã không hiểu lầm ý nghĩa của "gõ vịt", nhưng từ những gì tôi đã đọc, nó có nghĩa là tôi nên viết mã dựa trên cách đối tượng phản ứng với các phương thức hơn là loại/lớp nó là gì.Tôi có thể cải thiện phương pháp này bằng cách gõ vịt không?
Dưới đây là các mã:
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
Những gì tôi muốn là để đảm bảo rằng tôi kết thúc với một hash nơi các phím là một số nguyên đại diện cho ID của một đối tượng ActiveRecord. Tôi đặc biệt không thích phải lặp lại thông qua các khóa băm hai lần với số all?
để xác định xem tôi có cần lấy ID ra không.
Tất nhiên, tôi sẽ chấp nhận bất kỳ lời đề nghị khác để cải thiện mã này cũng :)
thậm chí Chưa bao giờ nghe nói về "gõ vịt" trước. Bạn đã vượt qua điều đó ở đâu? –
@Brian, http://en.wikipedia.org/wiki/Duck_typing –