使用skip_while()时“无法移出借用的内容”

eba*_*und 3 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.chars.next(); // Ok
       self.chars.skip_while(|c| true); // error: cannot move out of borrowed content [E0507]
   }
}
Run Code Online (Sandbox Code Playgroud)

Pao*_*lla 6

Skip_while以 self 为值。但chars无法移动,因为它仍然被 可变地借用&mut self。您可以使用by_ref来确保skip_while 获取的值是对包装器的引用。

self.chars.by_ref().skip_while(|c| true);
Run Code Online (Sandbox Code Playgroud)