Rust &引用;无法移出借用的内容“;使用skip_while()时

Rust &引用;无法移出借用的内容“;使用skip_while()时,rust,Rust,我在使用std::iter::Peekable时遇到问题。为什么下面的代码不编译 // rustc 1.7.0-nightly (b4707ebca 2015-12-27) use std::iter::*; struct Foo<'a> { chars: Peekable<Chars<'a>>, } impl<'a> Foo<'a> { fn foo(&mut self) { self.cha

我在使用std::iter::Peekable时遇到问题。为什么下面的代码不编译

// rustc 1.7.0-nightly (b4707ebca 2015-12-27)

use std::iter::*;

struct Foo<'a> {
    chars: Peekable<Chars<'a>>,
}

impl<'a> Foo<'a> {
   fn foo(&mut self) {
       self.chars.next(); // Ok
       self.chars.skip_while(|c| true); // error: cannot move out of borrowed content [E0507]
   }
}
//rustc 1.7.0-每晚(b4707ebca 2015-12-27)
使用std::iter::*;
结构Foo>,
}
恳求{
fn-foo(&mut-self){
self.chars.next();//确定
self.chars.skip_while(| c | true);//错误:无法移出借用的内容[E0507]
}
}
按值获取self。但是
字符
无法移动,因为它仍然被
和mut self
可变地借用。您可以使用来确保值skip_while get是对包装的引用

self.chars.by_ref().skip_while(|c| true);

为什么不可压缩结构实现了按值取
self
的方法?假设在它之后调用其他方法是合理的,即…@weberc2 skip_while是迭代器的方法,而不是Chars的固有方法(因此它不可能实现为take&self)。但是,一般来说,按值传递self并不妨碍传递引用(self变成&self,&self然后按值传递)。在这种情况下,我们使用by_ref适配器来实现这一点。