2013-03-26 2 views
2

Я работаю с API, который возвращает хэш для представления продукта:Вид уродливого значения по умолчанию для несуществующего хэш-ключа?

prod = API.getProduct(id) 
prod["name"] => "Widget" 

Проблемных arrises, потому что не все продукты содержат идентичные страницы атрибутов, поэтому я считаю, что делает много разовые ошибок ловли - у некоторых продуктов будет ключ для size или color, некоторые не будут.

Что является самым простым способом добраться до prod["non-existent attribute"] => "NA"?

+4

Prov определить значение по умолчанию для хэш-конструктора? Добавить функциональность непосредственно в хэш-экземпляр? –

+0

Предполагая нормальный хэш, см. ['Hash.new'] (http://ruby-doc.org/core-2.0/Hash.html#method-c-new) – 2013-03-26 19:23:42

+0

@DaveNewton googling эти вещи сейчас ...:) – RSG

ответ

4

Как сказал Дейв Ньютон, вы можете добавить значение по умолчанию в хэш-конструктор:

hash = Hash.new { |hash, key| hash[key] = "NA" } 
hash[:anything] == "NA" # => true 

Или использовать #default метод:

hash = Hash.new 
hash.default = "NA" 
hash[:anything] == "NA" # => true 

EDIT Быстрый синтаксис для установки по умолчанию при инициализации хеширования:

hash = Hash.new("NA") 
hash[:anything] == "NA" # => true 
+0

Я думал, что вы можете передать значение по умолчанию; изменилось? –

+0

Нет, нет, вы правы. Обычно я использую вышеупомянутый синтаксис, как правило, по привычке. Я обновлю свой ответ, чтобы показать более быстрый синтаксис. – MrDanA

Смежные вопросы