问题描述
如何创建其他语言称为惰性序列或生成器"函数的
How can I create what other languages call a lazy sequence or a "generator" function?
在Python中,如下面的示例(来自Python的文档)中所示,我可以使用yield
来懒惰地生成一个可迭代的序列,其方式不使用中间列表的内存:
In Python, I can use yield
as in the following example (from Python's docs) to lazily generate a sequence that is iterable in a way that does not use the memory of an intermediary list:
# a generator that yields items instead of returning a list
def firstn(n):
num = 0
while num < n:
yield num
num += 1
sum_of_first_n = sum(firstn(1000000))
如何在Rust中做类似的事情?
How can I do something similar in Rust?
推荐答案
Rust 1.0没有生成器功能,因此您必须使用显式迭代器.
Rust 1.0 does not have generator functions, so you'd have to do it manually with explicit iterators.
首先,使用next()
方法将您的Python示例重写为类,因为它更接近您可能会在Rust中获得的模型.然后,您可以使用实现Iterator
特征的结构在Rust中重写它.
First, rewrite your Python example as a class with a next()
method, since that is closer to the model you're likely to get in Rust. Then you can rewrite it in Rust with a struct that implements the Iterator
trait.
您也许还可以使用一个返回闭包的函数来实现类似的结果,但是我认为不可能实现Iterator
特征(因为将要求调用它来生成)一个新结果).
You might also be able to use a function that returns a closure to achieve a similar result, but I don't think it would be possible to have that implement the Iterator
trait (since it would require being called to generate a new result).
这篇关于Rust中的惰性序列生成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!