是否可以在 map 中使用 while 或任意迭代器?

B S*_*ven 0 ruby iterator

i = 0

while i < 10 do
  i += 1
end
Run Code Online (Sandbox Code Playgroud)

有没有办法让它发出值 [1..10]?

例如:

ary = while (i < 10).map do
Run Code Online (Sandbox Code Playgroud)

Ale*_*kin 6

有没有办法让它发出值?
我想使用while[...]

我怀疑我while通常会遵循为什么要在 ruby​​ 中使用,但是是的,如果您包装while到一个Enumerator实例中,这是可能的。

Enumerator.new do |y|
  i = 0
  while i < 10 do
    i += 1
    y << i
  end
end.map { |i| i ** 2 }
#? [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Run Code Online (Sandbox Code Playgroud)