【发布时间】:2020-02-09 19:52:58
【问题描述】:
我正在尝试使用rust generators 和此generator-to-iterator wrapper 将此python prime number generator 移植到生锈。
我的问题是原始实现是递归的,我没有设法通过以下错误:
error[E0720]: opaque type expands to a recursive type
--> src/main.rs:27:29
|
27 | fn recursive_generator() -> impl Iterator<Item = u64> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `GeneratorToIterator<[generator@src/main.rs:28:25:
48:6 {u64, (), impl std::iter::Iterator}]>`
以下是产生此错误的递归生成器的实现:
fn recursive_generator() -> impl Iterator<Item = u64> {
GeneratorToIterator(move || {
// Yield a few values
yield 1;
yield 2;
yield 3;
// Initialize the inner generator
let mut inner_value: u64 = 0;
let mut inner_generator = recursive_generator();
// Get the first value of the inner generator
match inner_generator.next(){
Some(x) => inner_value += x,
None => {},
}
// Yield some other values
yield 4;
yield 5;
yield 6;
})
}
完整的实现(带有GeneratorToIterator 定义)可以在here 找到。
我找到了这个related question,但我没有设法编译他们的gen_to_iter 函数。
编辑:感谢@bluss 的回答,我终于能够在 rust 中实现a working version of the prime number generator。
【问题讨论】: