Пользовательское сообщение, где ключ отсутствует в хэше - PullRequest
3 голосов
/ 31 января 2011

По определению хэши ruby ​​возвращают ноль, когда ключа нет.Но мне нужно использовать нестандартное сообщение вместо nil.Поэтому я использую что-то вроде этого:

val = h['key'].nil? ? "No element present" : h['key']

Но это имеет серьезный недостаток.Если для клавиши назначен ноль, то в этом случае также будет возвращено «Нет элемента».

Есть ли способ добиться этого безупречно?

Ответы [ 4 ]

3 голосов
/ 31 января 2011
irb(main):001:0> h = Hash.new('No element present')
=> {}
irb(main):002:0> h[1]
=> "No element present"
irb(main):003:0> h[1] = nil
=> nil
irb(main):004:0> h[1]
=> nil
irb(main):005:0> h[2]
=> "No element present"
2 голосов
/ 31 января 2011

Вы можете использовать метод has_key? вместо

val = h.has_key?('key') ? h['key'] : "No element present"
0 голосов
/ 31 января 2011
val = h.has_key?("key") ? h['key'] : "No element present"
0 голосов
/ 31 января 2011

Инициализируйте ваш хэш следующим образом:

> hash = Hash.new{|hash,key| hash[key] = "No element against #{key}"}
 => {}
> hash['a']
 => "No element against a" 
> hash['a'] = 123
 => 123 
> hash['a'] 
 => 123 
> hash['b'] = nil
 => nil 
> hash['b']
 => nil 

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...