可变地获取函数中的变量的所有权

时间:2014-09-19 17:38:03

标签: rust

是否可以对变量进行可变所有权,如果可以,如何?这是我的意思的一个例子(它不编译):

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();
}

我知道我可以使用一个可变引用,但我更愿意将迭代器移动到函数中并且这样做是可行的(当然循环需要可变迭代器)。

谢谢, 菲尔

1 个答案:

答案 0 :(得分:3)

你几乎得到了它。签名应为:

fn read_all_input<I: Iterator<u8>>(mut dont_use_after: I) -> SuperReturn {
//                                 ^^^

继承的可变性在绑定/模式上,而不在类型上。在mut中有一个&mut T,因为那里的可变性没有被继承。