In Rails können Sie hash.try(:[], :key)
tun, die hilft, wenn hash
möglicherweise nil
ist. Gibt es eine gleichwertige Version für die Verwendung des neuen sicheren Navigationsoperators Ruby 2.3 &.
mit []
?Sichere Navigation entspricht Rails versuchen für Hashes
Antwort
&.
nicht gleichwertig Rails' ist try
zurückkehren würde, aber Sie können &.
für Hashes verwenden. Benutze es einfach, nichts besonderes.
hash[:key1]&.[](:key2)&.[](:key3)
Obwohl ich das nicht tun würde.
akzeptierte Antwort nicht wird berücksichtigen, wenn hash
Null ist ...
Sie können neu schreiben, was Sie vor dem .try
den sicheren nav Betreiber haben verwenden und dass
hash&.try(:[], :key)
aber Sie arbeiten kann auch verwendet werden:
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
A w ay Sie können dies auch auf einen Hash ist, indem Sie ...
hash&.dig(:key1, :key2 ...)
die Null zurück, wenn eine beliebige Taste, holen nicht vorhanden ist.
{ key1: { key2: 'info' } }
zurückkehren würde 'info'
{ key1: { wrong_key: 'info' } }
nil
Pre Rubin 2.3
Ich hatte in der Regel so etwas wie dieser Put in meine intializer:
Class Hash
def deep_fetch *args
x = self
args.each do |arg|
x = x[arg]
return nil if x.nil?
end
x
end
end
und dann
response.deep_fetch 'PaReqCreationResponse', 'ThreeDSecureVERes', 'Message', 'VERes', 'CH', 'enrolled'
in einem verrückten Fall.
Der allgemeine Konsens in der Gemeinschaft scheint &.
Rubin 2.3 und später
Es gibt Hash#dig
Methode das bedeutet, dass gerade jetzt zu vermeiden, beide versuchen, und der einsame Betreiber zu sein:
Ermittelt das Wertobjekt, das den einzelnen Schlüsselobjekten wiederholt entspricht.
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot) #=> nil
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
Sieht in Anwendungsfällen verdächtig ähnlich zu "graben", in 2.3 nur als "&." Eingeführt. Irgendwelche Unterschiede? –
In der Tat, danke! :) – bbozo
IMHO sollte dies die akzeptierte Antwort sein. –
Während hash&.[](:key)
zu dem trainierten rubyist elegant ist, würde ich nur hash && hash[:key]
wie es besser liest und intuitiver für den Programmierer nach mir kommt, die nicht so vertraut sind mit die Feinheiten von Rubin. Einige zusätzliche Zeichen in der Codebasis können manchmal eine Menge Googling für jemand anderen speichern.
(In Anbetracht der Kontext Sie dies nutzen wollen, ist in einer bedingten Anweisung, natürlich.)
- 1. Gibt es eine Ruby-Methode, die drop_while für Hashes entspricht?
- 2. Spring EL: Sichere Navigation mit Kartenzugriff
- 3. Rails-Sitzung verhindert Navigation
- 4. Sichere Vorlagen (Ruby on Rails)
- 5. Rails entspricht Djangos „Auswahl“
- 6. LINQ entspricht in Rails
- 7. Nicht erlaubte Parameter mit Hashes in Rails
- 8. ASP.NET entspricht "Zyklus" von Rails?
- 9. Entspricht Array.some in ruby / rails
- 10. Hinzufügen von Hashes zu Hashes (Ruby)
- 11. Thread-sichere Rails-Controller-Aktionen - Instanzvariablen setzen?
- 12. Erstellen von Hashes für Passwörter
- 13. Wie Arrays von Hashes in Rails basiert auf Schlüssel von Hashes verschmelzen
- 14. Versuchen, REGEX für Benutzernamen Validierung in Rails schreiben
- 15. Hat Ruby Syntax für sichere Navigation Operator von Null-Werten, wie in Groovy?
- 16. Rails ActiveAdmin - get current_admin_user in Utility-Navigation?
- 17. WKWebView entspricht für UIWebView's scalesPageToFit
- 18. Hashes of Hashes Idiom in Ruby?
- 19. (Rails) Erstellen multidimensionaler Hashes/Arrays aus einem Datensatz ...?
- 20. Wie bearbeitet serialisierte Rails Hashes in einem Formular?
- 21. Entspricht PHPs print_r in Ruby/Rails?
- 22. Ruby on Rails entspricht Maven Archetypes
- 23. Wie gruppiert Rails Arrays von Hashes während der Formularübertragung?
- 24. Rails: Ersetzen versuchen mit Null Object Pattern
- 25. Benutzerdefinierte Navigation für xamarin.android
- 26. Tabbed Navigation für Benutzerprofil
- 27. Breadcrumb-Navigation für Kakao
- 28. jQuery scrollTop() für Navigation
- 29. Abrufen bestimmter Werte von Hashes innerhalb eines Arrays ruby rails
- 30. Wie dieses Array von Hashes GROUP_BY (Enumerable) [Ruby Rails]
Mögliche Duplikat [Rubin - Zugriff auf multidimensionale Hash und vermeiden Zugang nil Objekt] (https://stackoverflow.com/questions/10130726/ruby-access-multidimensionales-hash-and-avoid-access-nil-objekt) – kolen