假设我有一个名为 person 的哈希,其键是名称,值是具有键“年龄”和“爱好”的哈希。散列人员中的条目看起来像
=> person["some_guy"] = {:hobby => "biking", :age => 30}
Run Code Online (Sandbox Code Playgroud)
我将如何指定散列“人”的默认值?我尝试了以下
=> person.default = {:hobby => "none", :age => 20}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
编辑:
我正在设置一个属性,并希望自动填充其他属性。例如。
=> person["dude"][:age] += 5
Run Code Online (Sandbox Code Playgroud)
这就是我所看到的
=> person["dude"]
=> {:hobby => "none", :age => 25}
Run Code Online (Sandbox Code Playgroud)
这很好。但是,person在提示符下键入,我得到一个空的哈希值。
=> person
=> {}
Run Code Online (Sandbox Code Playgroud)
然而,我所期待的是
=> person
=> {"dude" => {:hobby => "none", :age => 25}}
Run Code Online (Sandbox Code Playgroud)
如果对象没有该方法,则不能调用 Hash#default。person.is_a? Hash在它起作用之前,您需要确保它。你确定你没有数组吗?
还值得注意的是,散列默认值不会填充任何内容;它只是缺少键时返回的值。如果您创建了一个键,那么您仍然需要填充该值。
# Pass a default to the constructor method.
person = Hash.new({hobby: "", age: 0})
person[:foo]
=> {:hobby=>"", :age=>0}
# Assign a hash literal, and then call the #default method on it.
person = {}
person.default = {hobby: "", age: 0}
person[:foo]
=> {:hobby=>"", :age=>0}
Run Code Online (Sandbox Code Playgroud)
由于哈希默认值仅适用于缺少的键,而不适用于缺少的值,因此如果要填充哈希的哈希,则需要采用不同的方法。一种方法是将块传递给哈希构造函数。例如:
person = Hash.new {|hash,key| hash[key]={hobby: nil, age:0}}
=> {}
person[:foo]
=> {:hobby=>nil, :age=>0}
person[:bar]
=> {:hobby=>nil, :age=>0}
person
=> {:foo=>{:hobby=>nil, :age=>0}, :bar=>{:hobby=>nil, :age=>0}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |