Я пытаюсь найти элегантный способ создания списка из функции, которая выдает значения как в Python, так и в Ruby.
В Python:
def foo(x):
for i in range(x):
if bar(i): yield i
result = list(foo(100))
в рубине:
def foo(x)
x.times {|i| yield i if bar(i)}
end
result = []
foo(100) {|x| result << x}
Хотя мне нравится работать на обоих языках, меня всегда немного беспокоила версия Ruby, которая должна была инициализировать список, а затем заполнить его. yield
Python приводит к простой итерации, и это здорово. Ruby yield
вызывает блок, что тоже замечательно, но когда я просто хочу заполнить список, это выглядит как-то неуклюже.
Есть ли более элегантный способ Ruby?
ОБНОВЛЕНИЕ Переработан пример, чтобы показать, что число значений, полученных из функции, не обязательно равно x.