2016-05-03 30 views
1

我的目標是使用一個默認值的哈希值作爲類常量。爲了做到這一點,我認爲我必須在一行中初始化一個Hash,作爲一個具有預定義值和默認值的常量。然後通過添加值如下在Ruby中聲明一個哈希值爲常量,默認值爲一行

  • 在構造函數中:

    MY_HASH = Hash.new(-1) 
    MY_HASH[1] = 0 
    MY_HASH[2] = 42 
    
  • 通過增加值首次然後

    根據Ruby的文檔,我可以用兩種方式設置的默認值稍後設置默認值:

    MY_HASH = { 
        1=>0, 
        2=>42, 
    } 
    MY_HASH.default = -1 
    

我試圖做到這一點在這樣一條線,但它不工作:

MY_HASH = { 
     1=>0, 
     2=>42, 
    }.default = -1 

    #It's the same as : 
    MY_HASH = -1 

是否有申報與某行的默認值的哈希的方法嗎?

+0

皮埃爾,我不反對回答你選擇。我會做出同樣的選擇(如果能夠得到答案,我會做出相同的選擇)。但是,您在發佈問題不到20分鐘後才做出選擇。我建議將來你暫時停止選擇,以免阻礙其他答案或將正在解答問題的其他人短路。許多人在等候至少幾個小時之後才授予綠黨。 –

回答

4

您可以使用update

MY_HASH = Hash.new(-1).update(1 = >0, 2 => 42) 
MY_HASH[1] 
#=> 0 
MY_HASH[52] 
#=> -1 

或者您可以使用Hash#merge

3

另一種方式:

MY_HASH = { 1=>0, 2=>42 }.tap { |h| h.default = -1 } 
MY_HASH[1]   #=> 0 
MY_HASH[529326] #=> -1 

如果沒有哈希值是nilfalse你也可以這樣寫:

MY_HASH = ->(key) { { 1=>0, 2=>42 }[key] || -1 } 
MY_HASH[1]   #=> 0 
MY_HASH[529326] #=> -1 

:-)