将Hash声明为常量,在一行中使用Ruby中的默认值

Pie*_*las 3 ruby hash

我的目标是使用具有默认值的哈希作为类常量.为此,在我看来,我必须在一行中初始化Hash作为具有预定义值和默认值的常量.

根据Ruby文档,我可以用两种方式设置默认值:

我尝试在这样的一行中做到这一点,但它不起作用:

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

   #It's the same as :
   MY_HASH = -1
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行中声明一个默认值的哈希?

Ily*_*lya 8

你可以使用update:

MY_HASH = Hash.new(-1).update(1 => 0, 2 => 42)
MY_HASH[1]
#=> 0
MY_HASH[52]
#=> -1
Run Code Online (Sandbox Code Playgroud)

或者你可以使用Hash#merge.


Car*_*and 6

其它的办法:

MY_HASH = { 1=>0, 2=>42 }.tap { |h| h.default = -1 }
MY_HASH[1]            #=> 0
MY_HASH[529326] #=> -1
Run Code Online (Sandbox Code Playgroud)

如果没有哈希值,nil或者false你也可以写:

MY_HASH = ->(key) { { 1=>0, 2=>42 }[key] || -1 }
MY_HASH[1]            #=> 0
MY_HASH[529326] #=> -1
Run Code Online (Sandbox Code Playgroud)

:-)