如何从缺少的哈希键返回nil而不是错误?

Joe*_*ano 3 ruby hash ruby-on-rails key

我有一个哈希,我正在寻找其中的某个键.但有时候hash自己也可能是零.在这种情况下,我不想hash["key"]返回undefined method '[]' for nil:NilClass错误.我想要它返回nil.

对于其他类似的情况,我可以使用try,像这样:nil.try(:key) => nil但我无法使用相同的方法来处理我的哈希.

换句话说,我正在寻找一种方法,结果是这样的:

> @hash = nil
> @hash.try(:["key"])
=> nil
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 6

各种to_X方法通常是方便的方法,可以安静地将nils 转换为您真正感兴趣的空实例,而不会使用明确的条件复杂化您的逻辑.

在您的情况下,您可以利用Hash#to_h返回哈希本身并NilClass#to_h返回空哈希:

> hash = nil
> hash.to_h['key']
=> nil

> hash = { 'key' => 11 }
> hash.to_h['key']
=> 11
Run Code Online (Sandbox Code Playgroud)

有时这比明确的噪音​​少if,有时则不然.


max*_*ner 6

你描述的情况(hash = nil)不是"缺少哈希键",它根本不是哈希.

除了其他答案,另一种方式可能是Ruby(2.3)

hash&.fetch("key", nil)
Run Code Online (Sandbox Code Playgroud)

要么:

 (hash || {})["key"]
Run Code Online (Sandbox Code Playgroud)

nil如果哈希是错误的,nil或者如果它丢失了密钥,它们都将返回.