Я хочу перевірити, чи присутній ключ "користувача" у хесі сеансу чи ні. Як я можу це зробити?
Зауважте, що я не хочу перевіряти, чи є значення ключа нульовим чи ні. Я просто хочу перевірити, чи присутній ключ "користувача" .
Я хочу перевірити, чи присутній ключ "користувача" у хесі сеансу чи ні. Як я можу це зробити?
Зауважте, що я не хочу перевіряти, чи є значення ключа нульовим чи ні. Я просто хочу перевірити, чи присутній ключ "користувача" .
Відповіді:
Hash
«S key?
метод говорить вам , чи присутній чи ні даний ключ.
session.key?("user")
У той час як Hash#has_key?
отримує роботу, а Мац відзначає тут , він застарів на користь Hash#key?
.
hash.key?(some_key)
В останніх версіях Ruby екземпляр Hash має key?
метод:
{a: 1}.key?(:a)
=> true
Обов’язково використовуйте клавішу символу або рядок, залежно від того, що у вас є хеш:
{'a' => 2}.key?(:a)
=> false
Дуже пізно, але бажано символи використовувати як ключові:
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
Але при створенні хеша, якщо ви передаєте рядок як ключ, він шукатиме рядок у ключах.
Але при створенні хеша ви передаєте символ як ключ, тоді has_key? буде шукати ключі за допомогою символу.
Якщо ви використовуєте Rails, ви можете використовувати, Hash#with_indifferent_access
щоб цього уникнути; обидва hash[:my_key]
і hash["my_key"]
вкажуть на один і той же запис
Hash#with_indifferent_access
щоб цього уникнути; обидва :my_key
і "my_key"
вкажуть на той самий запис
Ви завжди Hash#key?
можете перевірити, чи ключ присутній у хеші чи ні.
Якщо ні, то це поверне вас false
hash = { one: 1, two:2 }
hash.key?(:one)
#=> true
hash.key?(:four)
#=> false
Інший шлях тут
hash = {one: 1, two: 2}
hash.member?(:one)
#=> true
hash.member?(:five)
#=> false