Присвоение замещающего значения в случае нуля - PullRequest
4 голосов
/ 15 ноября 2009

У меня есть несколько переменных:

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 ]

12 голосов
/ 15 ноября 2009

Вы можете сделать это, так как значение nil возвращает false, а || будет оценивать правую часть только в том случае, если левая сторона равна false:

name = personal_details[0] || ''
2 голосов
/ 15 ноября 2009
name = personal_details[0] || ""
1 голос
/ 15 ноября 2009

Обновление: Это неверно, см. Обсуждение ниже.

Существует встроенный способ сделать это с помощью 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, подход || вернет пустую строку вместо значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...