Ich möchte überprüfen, ob der "Benutzer" -Schlüssel im Sitzungs-Hash vorhanden ist oder nicht. Wie kann ich das machen?
Beachten Sie, dass ich nicht prüfen möchte, ob der Wert des Schlüssels Null ist oder nicht. Ich möchte nur überprüfen, ob der "Benutzer" Schlüssel vorhanden ist.
Die Methode key?
von Hash
gibt an, ob ein bestimmter Schlüssel vorhanden ist oder nicht.
session.key?("user")
Während Hash#has_key?
die Arbeit erledigt, wie Matz feststellt hier , wurde es zugunsten von Hash#key?
verworfen.
hash.key?(some_key)
In den neuesten Ruby Versionen hat die Hash-Instanz eine key?
Methode:
_{a: 1}.key?(:a)
=> true
_
Stellen Sie sicher, dass Sie den Symbolschlüssel oder einen String-Schlüssel verwenden, je nachdem, was in Ihrem Hash enthalten ist:
_{'a' => 2}.key?(:a)
=> false
_
Es ist sehr spät, aber vorzugsweise sollten Symbole als Schlüssel verwendet werden:
my_hash = {}
my_hash[:my_key] = 'value'
my_hash.has_key?("my_key")
=> false
my_hash.has_key?("my_key".to_sym)
=> true
my_hash2 = {}
my_hash2['my_key'] = 'value'
my_hash2.has_key?("my_key")
=> true
my_hash2.has_key?("my_key".to_sym)
=> false
Wenn Sie jedoch einen Hash erstellen und einen String als Schlüssel übergeben, sucht dieser nach dem String in den Schlüsseln.
Aber wenn Sie einen Hash erstellen, übergeben Sie das Symbol als Schlüssel und dann als has_key? Durchsucht die Tasten mit dem Symbol.
Wenn Sie Rails verwenden, können Sie Hash#with_indifferent_access
verwenden, um dies zu vermeiden. Sowohl hash[:my_key]
als auch hash["my_key"]
zeigen auf denselben Datensatz
Sie können immer Hash#key?
verwenden, um zu überprüfen, ob der Schlüssel in einem Hash vorhanden ist oder nicht.
Wenn nicht, wird es Ihnen zurückgeben false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
Ein anderer Weg ist hier
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false