我有一些变数:
name
age
address
phone
social_security
email
weight
一个名为personal_details
的数组,其中每个值都在0-6位置。
所以我分配这样的值:
name = personal_details[0]
address = personal_details[1]
phone = personal_details[2]
social_security = personal_details[3]
email = personal_details[4]
weight = personal_details[5]
但在某些情况下,右侧的数据不存在。
除了为数组中的每个元素写这样的内容之外,处理此问题的更优雅方法是什么?
if !personal_detail[0].nil?
name = personal_details[0]
else
name = ""
end
if !personal_detail[1].nil?
address = personal_details[1]
else
address = ""
end
答案 0 :(得分:12)
您可以执行此操作,因为nil
值返回false,而||
只会评估右侧是否为左侧:
name = personal_details[0] || ''
答案 1 :(得分:2)
name = personal_details[0] || ""
答案 2 :(得分:1)
更新:这是不正确的,请参阅下面的讨论。
使用Array#fetch有一种内置的方法:
personal_details = ['Joe User', nil, '12 Main Street']
name = personal_details.fetch(0, '')
age = personal_details.fetch(1, '')
address = personal_details.fetch(2, '')
根据您提供的示例,其他解决方案可以正常工作。如果右侧的某个值设置为false
,则||
方法将返回空字符串而不是值。