在nil的情况下分配替换值

时间:2009-11-15 02:54:01

标签: ruby

我有一些变数:

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

3 个答案:

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