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

Conditionally set value of key in hash

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

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

见下文 asignee_handle:issue_closed_at:

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

或者使用三元运算符[expression] ? [true] : [false]:

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

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

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

:asignee_handle 键的值现在将是 issue['assignee']['login']nil(或者如果 issue['assignee'] 不是散列)。