在nil的情况下分配替换值

我有几个变量:

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 

你可以这样做,因为nil值返回false和|| 如果左侧为假,则仅评估右侧:

 name = personal_details[0] || '' 
 name = personal_details[0] || "" 

更新:这是不正确的,请参阅下面的讨论。

使用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 ,则为|| 方法将返回空字符串而不是值。