Возврат членов hashmap через метод get класса
Следующее возвращает default
"client?"
:
class ClientMap
def initialize
@@clients = {"DP000459": "BP"}
@@clients.default = "client?"
end
def get(id)
return @@clients[:id]
end
end
clientMap = ClientMap.new
cKey = "DP000459"
puts clientMap.get(cKey)
Кто-нибудь может объяснить, почему я не могу получить ничего, кроме "по умолчанию"?
2 ответа
У тебя две проблемы. Во-первых, вы используете символьный синтаксис в вашем хэше, который работает, только если ваши ключи являются символами. Если вы хотите, чтобы ключи были строками, вам нужно использовать синтаксис hash-rocket: @@clients = {'DP000459' => 'BP'}
,
Во-вторых, ваш метод возвращает clients[:id]
независимо от того, какой параметр предоставляется. Ключ является символом :id
а не локальная переменная id
, Вы должны изменить это на @@clients[id]
,
Вот исправленная версия того, что вы хотите:
class ClientMap
def initialize
@@clients = {'DP000459' => 'BP'}
@@clients.default = 'client?'
end
def get(id)
@@clients[id]
end
end
Я также позволил себе сделать интервал более руби-идиоматическим.
Наконец, для имен переменных в Ruby используйте snake_case:
>> client_map = ClientMap.new
>> c_key = 'DP000459'
>> client_map.get(c_key)
#> "BP"
Посмотрите на этот код:
h = { foo: 'bar' } # => {:foo=>"bar"}
h.default = 'some default value' # => "some default value"
h[:foo] # => "bar"
h[:non_existing_key] # => "some default value"
Вы можете прочитать здесь о методе Hash#default
Возвращает значение по умолчанию, значение, которое будет возвращено hsh, если ключ не существует в hsh