Rails 3.1: идиома Ruby для предотвращения исключения .each, если nil?

Мы можем сделать длины равными, реплицируя второй столбец, а затем разделим на подмножество набора данных, у которого нет первого или второго столбца

df1[-(1:2)] <- df1[-(1:2)]/df1[,2][row(df1[-(1:2)])]
df1
#       Name        Col      dKO1      dKO2      sdi1
#29      Mark 1769380098 0.8674967 0.9201740 0.8735108
#30    Anders 1444462500 1.2425947 1.2336649 1.2105541
#1278     Tom 1499146688 1.5293111 1.1068905 1.1640133
#1295     Vin 1276309375 0.6705163 0.5807531 1.2195172
#1296  Marcel   22279500 0.9836621 1.8511187       NaN
#1297    Tyta 3114023471 0.9813868 0.9098608 1.1405553
#1298   Gerta 2961012500 1.2097011 1.2412815 1.0496874
#1307   Moses 3978937424 0.9467125 0.9029171 0.9344295
#1642    Hank 1703925000 1.1991725 0.9310929 0.8100584
#1674    Rita 1838885550 1.1614969 1.0520367 1.2059076
#1754 Margary 1483386250 0.9990865 0.9891363 0.6922093
25
задан user7610 16 March 2018 в 16:48
поделиться

3 ответа

Не может полагать, что никто еще не предложил это:

(@myvar.phonelist || []).each do |phone|
   ...

, Если phonelist nil, эти each, циклично выполнится на пустом массиве, выполняя нулевые времена блока.

ОДНАКО это все еще выдаст исключение, если phonelist не будет счетное (например, массив).

2
ответ дан 28 November 2019 в 17:43
поделиться

Просто сделайте следующее:

Array(phonelist).each do |phone|
  #deal with your phone
end

Массив (my_variable) обеспечит возврат массива, если my_variable равен nil.

Он не создает новый массив, если my_variable уже является массивом, поэтому его безопасно и легко использовать где угодно!

29
ответ дан Arkan 16 March 2018 в 16:48
поделиться

Просто убедитесь, что пустое значение phonelist является значением [] вместо значения nil.

В качестве альтернативы, значение nil является фальси в Ruby, поэтому вы можете использовать ноль-наказание

if phonelist
   phonelist.each do |phone|
     ...
1
ответ дан user7610 16 March 2018 в 16:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: