2013-03-26 24 views
2

我與返回的哈希來表示產品的API時:不存在散列鍵的醜陋默認值的種類?

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

問題棱因爲不是所有的產品都含有相同的屬性頁,所以我覺得自己做了很多一次性的錯誤捕獲 - 某些產品將擁有sizecolor的鑰匙,有些不會。

prod["non-existent attribute"] => "NA"最簡單的方法是什麼?

+4

Prov ide默認值的哈希構造函數?將功能直接添加到哈希實例? – 2013-03-26 19:22:43

+0

假設一個正常的散列,請參閱['Hash.new'](http://ruby-doc.org/core-2.0/Hash.html#method-c-new) – 2013-03-26 19:23:42

+0

@DaveNewton現在使用Google搜索這些東西...: ) – RSG 2013-03-26 19:23:59

回答

4

戴維牛頓說,你可以添加默認值到哈希構造:

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

或者使用#default方法:

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

編輯快速語法設置默認初始化散列時的值爲:

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

我以爲你可以傳遞默認值;有改變嗎? – 2013-03-26 19:34:32

+0

不,它沒有,你是對的。我通常使用上面的語法主要是出於習慣。我會更新我的答案以顯示更快的語法。 – MrDanA 2013-03-26 19:39:11