【问题标题】:How to create a finite length generator from an infinite generator如何从无限生成器创建有限长度生成器
【发布时间】:2023-03-17 09:03:01
【问题描述】:

所以我有一个 javascript 生成器(如下),它会继续无限生成随机数。

function* createRandomNumberStream(): IterableIterator<number> {
  while (true) {
    yield Math.random()
  }
}

我如何编写一个 (it: Iterable&lt;T&gt;, n: number) =&gt; Iterable&lt;T&gt; 类型的生成器函数,它返回一个在 n 个 yield 之后结束的新迭代?

注意createRandomStream() 生成器并不真正相关,它只是一个无休止的可迭代生成器的示例。我正在尝试制作一个基本上对可迭代对象进行切片的生成器。

【问题讨论】:

标签: javascript typescript yield iterable


【解决方案1】:

这是你想要的吗?

function* createRandomNumberStream() {
    while (true) {
        yield Math.random()
    }
}

function* take<T>(it: Iterator<T>, count: number) {
    let currentCount = 0
    while (currentCount++ < count) {
        yield it.next().value
    }
}

const stream = take(createRandomNumberStream(), 3)

for (const num of stream) {
    console.log(num)
}

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多