Это может быть дубликат. Я не знаю. Я не мог понять другие ответы достаточно хорошо, чтобы это знать. :)Конфликтный срок службы для итератора, возвращаемого функцией
версияРжавчина: rustc 1.0.0-еженощно (b47aebe3f 2015-02-26) (встроенный 2015-02-27)
В принципе, я передаю логическое значение этой функции, которая, как предполагается построить итератор, который фильтрует один путь для истинного и другого способа для false. Тогда это своего рода крэпс, потому что он не знает, как сохранить это логическое значение удобным, я думаю. Я не знаю. Здесь есть несколько проблем с продолжительностью жизни, что обескураживает, потому что это действительно общий шаблон для меня, так как я родом из .NET.
fn main() {
for n in values(true) {
println!("{}", n);
}
}
fn values(even: bool) -> Box<Iterator<Item=usize>> {
Box::new([3usize, 4, 2, 1].iter()
.map(|n| n * 2)
.filter(|n| if even {
n % 2 == 0
} else {
true
}))
}
Есть ли способ сделать эту работу?
Этот вопрос был кросс-размещен на [Rust Reddit] (http://www.reddit.com/r/rust/comments/2xearb/returning_an_iterator/). – Shepmaster
В качестве побочного примечания, используя не зависящие от платформы целые числа, такие как 'usize', когда это не необходимо, используйте' i32' или 'u32'. – heinrich5991