Ruby:如何在通过散列文字表示法创建的散列上为 nil 键设置默认值?

Ruby: How to set a default value for nil keys on a hash created via hash literal notation?

在我正在学习的免费 Ruby 课程中,向我展示了通过构造函数为散列创建默认值的方法。它看起来像这样:

no_nil_hash = Hash.new("default value for nil key")
puts no_nil_hash["non_existing_key"]

打印:default value for nil key

我如何通过散列文字表示法来解决这个问题?

没有通过 google 找到任何答案,这是我迄今为止徒劳的尝试:

  1. via_hash_literal = {"default value for nil key"} 但这会导致错误:syntax error, unexpected '}', expecting =>
  2. via_hash_literal = {=> "default value for nil key"} 导致更多错误: syntax error, unexpected =>, expecting '}' via_hash_literal = { => "default value for nil key"} syntax error, unexpected '}', expecting end-of-input ...=> "default value for nil key"}
  3. via_hash_literal = {nil => "default value for nil key"} 不会抛出错误,但 puts via_hash_literal["non_existing_key"] 不会打印默认键:default value for nil key,而是我得到一行空行。

可以这样写:

no_nil_hash = {}
no_nil_hash.default = "default value for nil key"
puts no_nil_hash["non_existing_key"]

IRB 结果:

irb(main):001:0> no_nil_hash = {}
=> {}
irb(main):002:0> no_nil_hash.default = "default value for nil key"
=> "default value for nil key"
irb(main):003:0> no_nil_hash["non_existing_key"]
=> "default value for nil key"

阅读更多:https://docs.ruby-lang.org/en/2.0.0/Hash.html

在 Ruby 中生成新散列的 {} 语法不支持设置默认值。但您也可以使用 Hash#default= 设置默认值:

hash = {}
hash.default = "default value"

hash[:foo]
#=> "default value"