So weiß ich von ein paar verschiedene Ansätze, die ich bin mir bewusst, und ich möchte die Vor- und Nachteile der verschiedenen Möglichkeiten für verschiedene Kriterien erforschen, die sind:Lange nil sichere Methode Ketten
- Lesbarkeit
- Leistung
- einfache Debugging
- OO Prinzipien (geringe Kopplung und hohe Kohäsion)
explizit mit der Versuch Methode aus der aktiven Unterstützung
person.try(:pet).try(:name).try(:upcase)
eine Rettung nil
person.pet.name.upcase rescue nil
Mit einem & & Operator Kette
person && person.pet && person.pet.name && person.pet.name.upcase
Affe Patchen des Object-Klasse finden Sie unter https://gist.github.com/thegrubbsian/3499234 für den ursprünglichen Kern
Ich habe keine, null sicheren Code, anstatt die Daten überprüfen, bevor Sie den Code nennen
#not a good implementation by any means
def person_has_pet_with_name? person
begin
return true if !person.pet.name.nil?
rescue
return false
end
end
person.pet.name.upcase if person_has_pet_with_name?(person)
Hat meine Antwort Ihnen irgendwie geholfen? –
Bitte markieren Sie die Antwort als gelöste Frage, wenn sie Ihre Frage beantwortet hat. –