3
如你所知,如果你直接將它傳遞一個迭代器,像這樣一個for in
環路擁有其循環的持續時間迭代器:嵌套一個迭代的循環
let v = vec![...];
let mut i = v.iter();
for _ in i { }
由於malbarbo觀察,可以指示for
到通過編寫i.by_ref()
參考i
。但是,你不能重複,從裏面的for循環:
for _ in i.by_ref() {
for _ in i.by_ref() {
//^error: cannot borrow `i` as mutable
// more than once at a time [--explain E0499]
break;
}
}
理解的是,外for
循環必須修改它的迭代器,所以它需要一個可變引用它,而不是別人可以調用i
可變的方法了。我們可以更直接地表明這個問題就像這樣:
for _ in i.by_ref() {
i.next(); // same error
}
一個辦法是使外for
一個loop
並直接調用i.next()
。有沒有更漂亮的方式讓我們的蛋糕(外循環迭代i
)並且也吃了(我們仍然可以在外循環內部提前i
)?