Идиоматический Ruby - Выполнять функцию до тех пор, пока она не вернет ноль, собирая ее значения в список

Я украл свой заголовок из этого сообщения: Выполняет функцию до тех пор, пока она не вернет ноль, собирая ее значения в список

Этот вопрос относится к Lisp и, откровенно говоря, , я ничего не понял. Однако я думаю, что его вопрос, переведенный на Ruby, является моим собственным:

Как лучше всего создать условный цикл в [Ruby], который выполняет функцию до тех пор, пока она не вернет NIL, и в это время она собирает возвращенные значений в список?

Мой нынешний неуклюжий подход таков:

def foo
   ret = Array.new
   x = func() # parenthesis for clarity (I'm not a native Ruby coder...)
   until x.nil?
     ret << x
     x = func() 
   end
   ret
end

Этот фрагмент кода будет делать то, что я хочу ... но я знаю, что есть более чистый, более идиоматичный подход Ruby ... верно?

13
задан Community 23 May 2017 в 11:45
поделиться