Rust中的惰性序列生成 [英] Lazy sequence generation in Rust

查看:69
本文介绍了Rust中的惰性序列生成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何创建其他语言称为惰性序列或生成器"函数的

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中的惰性序列生成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆