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 バージョンではリストを初期化してから入力する必要があることにいつも少し悩まされていました。Python のyield
結果は単純な反復であり、これは素晴らしいことです。Rubyyield
はブロックを呼び出します。これも優れていますが、リストを埋めたいだけの場合は、ちょっとぎこちなく感じます。
よりエレガントな Ruby の方法はありますか?
UPDATE関数から得られる値の数が必ずしも x に等しいとは限らないことを示すために、例を作り直しました。