2016-05-03 12 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 

:-)