Присвоить первое ненулевое значение

#ruby

#ruby

Вопрос:

Допустим, у меня определены следующие переменные:

 a = 6
b = 4
c = 0
  

Я хочу присвоить первое ненулевое значение другой переменной, но в обратном порядке (c -> b -> a). Изначально я пытался d = c || b || a , но это все равно привело к 0. Есть ли однострочный способ сделать это?

Комментарии:

1. Другой способ — не допускать, чтобы переменные были равны 0, но пусть это будет nil в таком случае. Часто лучше избежать проблемы в восходящем потоке, чем позволить ей произойти и решить ее позже.

2. Числа представляют размеры коллекций DataMapper, поэтому они будут только числовыми значениями.

Ответ №1:

Использовать detect

 [c,b,a].detect { |i| i > 0 }
  

Комментарии:

1. Или сохранить два символа с помощью find !

2. Спасибо, это было действительно легко реализовать!

Ответ №2:

 [c,b,a].select { |i| i > 0 }.first => 4