有条件地设置散列中键的值
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']
不是散列)。
我有一个方法 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']
不是散列)。