我正在尝试做的一个例子可能是最好的:
def repeater(n = 1)
n.times { yield }
end
默认情况下,repeater 将通过一次给定的块。但是,如果给定 n > 1,我希望它多次通过该块。由于某种原因,上面的代码不起作用。
例如:
我希望这会导致64
,但它会返回5
:
y = 2
repeater(5) { y *= 2 }
为什么会这样?我哪里错了?我对 相当陌生yield
,并且不完全(清楚地)理解它。
没有错yield
。该函数返回一个n.times { … }
显然等于的结果5
:
> 5.times { }
# => 5
您想累积 yield 的结果并从您的函数中显式返回它。
我设法使用times
我尝试做的方法解决了这个问题:
def repeater(n = 1)
(n - 1).times { yield }
yield
end
如我所愿,上面看起来不错,但我希望我可以用n.times
而不是(n - 1).times
.
以下是使用它的解决方案,但它看起来并不优雅:
def repeater(n = 1)
result = nil
n.times {result = yield}
result
end
我会尝试找到一个更优雅的解决方案。