我试图想出一种优雅的方法来从一个在 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 方式?
更新重做示例以显示从函数产生的值的数量不一定等于 x。