是否可以对变量进行可变所有权,如果可以,如何?这是我的意思的一个例子(它不编译):
fn read_all_input<I: Iterator<u8>>(dont_use_after: mut I) -> SuperReturn {
//This function will consume all the iterator and therefore wants to TAKE it away
//from the user, not borrow it.
}
fn main() {
//Somehow get an iter.
let mut myIter = ...;
//Pass it to the function.
read_all_input(myIter);
//Make the compiler cry here.
let x = myIter.next();
}
我知道我可以使用一个可变引用,但我更愿意将迭代器移动到函数中并且这样做是可行的(当然循环需要可变迭代器)。
谢谢, 菲尔
答案 0 :(得分:3)
你几乎得到了它。签名应为:
fn read_all_input<I: Iterator<u8>>(mut dont_use_after: I) -> SuperReturn {
// ^^^
继承的可变性在绑定/模式上,而不在类型上。在mut
中有一个&mut T
,因为那里的可变性没有被继承。