Mam nadzieję, że źle zrozumiałem znaczenie "pisania na maszynie", ale z tego, co przeczytałem, wynika, że powinienem napisać kod na podstawie tego, jak obiekt reaguje na metody, a nie na jaki typ/klasę.Czy mogę poprawić tę metodę za pomocą typowania kaczego?
Oto kod:
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
Co chcę jest, aby upewnić się, że skończę z mieszania, gdzie klucze są liczbą całkowitą reprezentującą identyfikator obiektu ActiveRecord. Nie jestem szczególnie zadowolony z konieczności powtórzenia przez klawisze mieszające dwukrotnie z all?
, aby określić, czy muszę pobrać identyfikator.
Oczywiście, ja przyjmuję jakieś inne sugestie, aby poprawić ten kod, jak również :)
Nigdy nawet słyszał „kaczka wpisując” wcześniej. Gdzie się z tym spotkałeś? –
@Brian, http://en.wikipedia.org/wiki/Duck_typing –