在Ruby中声明一个哈希值为常量,默认值为一行
问题描述:
我的目标是使用一个默认值的哈希值作为类常量。为了做到这一点,我认为我必须在一行中初始化一个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
是否有申报与某行的默认值的哈希的方法吗?
答
您可以使用update
:
MY_HASH = Hash.new(-1).update(1 = >0, 2 => 42)
MY_HASH[1]
#=> 0
MY_HASH[52]
#=> -1
或者您可以使用Hash#merge
。
答
另一种方式:
MY_HASH = { 1=>0, 2=>42 }.tap { |h| h.default = -1 }
MY_HASH[1] #=> 0
MY_HASH[529326] #=> -1
如果没有哈希值是nil
或false
你也可以这样写:
MY_HASH = ->(key) { { 1=>0, 2=>42 }[key] || -1 }
MY_HASH[1] #=> 0
MY_HASH[529326] #=> -1
:-)
皮埃尔,我不反对回答你选择。我会做出同样的选择(如果能够得到答案,我会做出相同的选择)。但是,您在发布问题不到20分钟后才做出选择。我建议将来你暂时停止选择,以免阻碍其他答案或将正在解答问题的其他人短路。许多人在等候至少几个小时之后才授予绿党。 –