Ruby 有条件地设置散列中键的值

Ruby 有条件地设置散列中键的值,ruby,hash,Ruby,Hash,我有一个方法,它返回解析值的散列。如果满足条件,哈希中的某些值我希望为nil,但我无法在该值中写入条件 有没有一种方法可以有条件地设置键的值,而不必在散列之外有一堆if/else语句 请参见下面的asignee\u句柄:和issue\u closed\u地址:: def parse(issue) { github_id: issue['id'].to_i, github_number: issue['number'].to_i,

我有一个方法,它返回解析值的散列。如果满足条件,哈希中的某些值我希望为
nil
,但我无法在该值中写入条件

有没有一种方法可以有条件地设置键的值,而不必在散列之外有一堆
if
/
else
语句

请参见下面的
asignee\u句柄:
issue\u closed\u地址:

def parse(issue)
    {
      github_id:          issue['id'].to_i,
      github_number:      issue['number'].to_i,
      github_url:         issue['url'],
      title:              issue['title'],
      body:               issue['body'],
      creator_handle:     issue['user']['login'],
      asignee_handle:     issue['assignee']['login'] if issue['assignee'] #can't do this,
      asignee_avatar_url: issue['assignee']['avatar_url'],
      issue_created_at:   issue['created_at'].to_datetime,
      issue_updated_at:   issue['updated_at'].to_datetime,
      issue_closed_at:    issue['closed_at'].to_datetime if issue['closed_at'],
      repo:               issue['url'].split('/')[5]
    }
  end

您可以使用
if
语句尝试以下条件赋值:

asignee_handle: if issue['assignee'] then issue['assignee']['login'] end
或者使用三元运算符
[表达式]?[正确]:[错误]

asignee_handle: issue['assignee'] ? issue['assignee']['login'] : nil

您只需要在值周围加上一些括号:

def parse(issue)
  {
    #...
    asignee_handle: (issue['assignee']['login'] if issue['assignee']),
    #...
  }
end

:asignee\u handle
键的值现在要么是
issue['assignee']['login']
,要么是
nil
(或者如果
issue['assignee']
不是散列,您将得到一个错误)。

asignee\u handle:issue['assignee'>?问题['assignee']['login']:无