gpt4 book ai didi

ruby - 制作 map !枚举员做我想做的事

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:32 25 4
gpt4 key购买 nike

有一个数组

a = 1, 2, 3, 4

和一个枚举器:

e = a.map!

然后,通过重复调用 e.next,数组 a 被很好地销毁:

e.next #=> 1
a #=> [1, 2, 3, 4]
e.next #=> 2
a #=> [nil, 2, 3, 4]
e.next #=> 3
a #=> [nil, nil, 3, 4]

太搞笑了!但是当我尝试

e.next { |x| 2 * x } # => 4

我明白了

a #=> [nil, nil, nil, 4]

而不是想要的

a #=> [nil, nil, nil, 8]

我误会了什么?如何让 a.map! 对元素做我想做的事?

我的问题是,我并不完全理解枚举器。例如,使用前面的代码,枚举器 e 构成了 a 的后门:

e.each { 42 }
a #=> [42, 42, 42, 42]

我想知道,如何使用 nil 以外的值逐渐做到这一点。 (我可以多次使用 e.rewinde.next 逐渐用 nils 填充它,如我之前所示。

最佳答案

要使 map! 的行为如您所愿,您需要 Enumerator#feed 方法,请考虑这一点

ary = *1..4
enum = ary.map!
# the `loop` method handles `StopIteration` for us
loop do
x = enum.next
enum.feed(x * 2)
end

ary
# => [2, 4, 6, 8]

关于ruby - 制作 map !枚举员做我想做的事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com