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']:无