我的目标是使用具有默认值的哈希作为类常量.为此,在我看来,我必须在一行中初始化Hash作为具有预定义值和默认值的常量.
根据Ruby文档,我可以用两种方式设置默认值:
在构造函数中,然后通过添加值如下:
MY_HASH = Hash.new(-1)
MY_HASH[1] = 0
MY_HASH[2] = 42
Run Code Online (Sandbox Code Playgroud)首先添加值,然后再设置默认值:
MY_HASH = {
1=>0,
2=>42,
}
MY_HASH.default = -1
Run Code Online (Sandbox Code Playgroud)我尝试在这样的一行中做到这一点,但它不起作用:
MY_HASH = {
1=>0,
2=>42,
}.default = -1
#It's the same as :
MY_HASH = -1
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行中声明一个默认值的哈希?
你可以使用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
.
其它的办法:
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)
:-)
归档时间: |
|
查看次数: |
1294 次 |
最近记录: |