我可以从一个块创建一个Ruby哈希吗?
像这样的东西(虽然这特别不起作用):
foo = Hash.new do |f|
f[:apple] = "red"
f[:orange] = "orange"
f[:grape] = "purple"
end
Run Code Online (Sandbox Code Playgroud)
wup*_*tah 18
在Ruby 1.9中(或者在加载ActiveSupport时,例如在Rails中),您可以使用Object#tap,例如:
foo = Hash.new.tap do |bar|
bar[:baz] = 'qux'
end
Run Code Online (Sandbox Code Playgroud)
您可以传递一个块Hash.new,但这用于定义默认值:
foo = Hash.new { |hsh, key| hsh[key] = 'baz qux' }
foo[:bar] #=> 'baz qux'
Run Code Online (Sandbox Code Playgroud)
对于它的价值,我假设你有一个更大的目的与这块事.语法{ :foo => 'bar', :baz => 'qux' }可能就是你真正需要的.
gka*_*kck 13
我不明白为什么
foo = {
:apple => "red",
:orange => "orange",
:grape => "purple"
}
Run Code Online (Sandbox Code Playgroud)
不适合你吗?
我想发布此评论,但我找不到按钮,抱歉
传递一个块来Hash.new指定当您请求不存在的密钥时会发生什么。
foo = Hash.new do |f|
f[:apple] = "red"
f[:orange] = "orange"
f[:grape] = "purple"
end
foo.inspect # => {}
foo[:nosuchvalue] # => "purple"
foo # => {:apple=>"red", :orange=>"orange", :grape=>"purple"}
Run Code Online (Sandbox Code Playgroud)
由于查找不存在的键将覆盖:apple、:orange和的任何现有数据:grape,因此您不希望发生这种情况。
这是Hash.new 规范的链接。