首页 > 解决方案 > Ruby 通过调用方法创建哈希内容

问题描述

我有以下要构建哈希的方法:

方法:

def support_board
  { 'project' => { 'id' => '1234' } }
end

def security_board
  { 'project' => { 'id' => '4352' } }
end

def project_setup
  { 'customfield_12345' => 'None' }
end

预期哈希:

{
  'fields' => {
    'project' => { 'id' => '1234' },
    'issuetype' => { 'id' => '4352' },
    'customfield_12345' => 'None'
  }
}

我试图这样做:

{
  'fields' => {
    support_board,
    security_board,
    project_setup
  }
}

但这不是正确的语法,我在控制台中遇到了一些错误-unexpected tSTRING_DEND, expecting end-of-input

标签: ruby

解决方案


您可以使用Hash#merge!以下值合并:

{ "fields" => {} }.tap do |return_value|
  return_value['fields'].merge!(support_board, security_board, project_setup)
end
# => {"fields"=>{"project"=>{"id"=>"1234"},
# =>    "issuetype"=>{"id"=>"4352"}, "customfield_12345"=>"None"}}

或者,在旧的 ruby​​ 版本中,一次做一个:

[
  support_board,
  security_board,
  project_setup
].each_with_object({'fields' => {}}) do |method_call, return_value|
  return_value['fields'].merge!(method_call)
end
# => same as above

推荐阅读