Я пытаюсь портировать этот генератор простых чисел python на ржавчину с помощью генераторов ржавчины и этой оболочки генератора от итератора .
Моя проблема в том, что исходная реализация является рекурсивной, и мне не удалось передать следующую ошибку:
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
) может быть найдена здесь .
Я нашел этот связанный вопрос но яне удалось скомпилировать их gen_to_iter
функцию.
РЕДАКТИРОВАТЬ: Благодаря ответу @bluss я наконец-то смог реализовать рабочую версию генератора простых чисел в ржавчине.