相关疑难解决方法(0)

无法摆脱借来的内容

我不明白这个错误cannot move out of borrowed content.我收到了很多次,我总是解决它,但我从来没有理解为什么.

例如:

for line in self.xslg_file.iter() {
    self.buffer.clear();

    for current_char in line.into_bytes().iter() {
        self.buffer.push(*current_char as char);
    }

    println!("{}", line);
}
Run Code Online (Sandbox Code Playgroud)

产生错误:

error[E0507]: cannot move out of borrowed content
  --> src/main.rs:31:33
   |
31 |             for current_char in line.into_bytes().iter() {
   |                                 ^^^^ cannot move out of borrowed content
Run Code Online (Sandbox Code Playgroud)

我通过克隆解决了这个问题line:

error[E0507]: cannot move out of `*line` which is behind a shared reference
  --> src/main.rs:31:33
   |
31 |             for current_char in line.into_bytes().iter() {
   |                                 ^^^^ …
Run Code Online (Sandbox Code Playgroud)

reference move-semantics rust borrow-checker

115
推荐指数
2
解决办法
6万
查看次数

`let Some(var)= option;`语法可以用在已知它不是'None`的情况下吗?

如果已知选项变量为非None,则通常可以写入:

let var = option_var.unwrap();
Run Code Online (Sandbox Code Playgroud)

在我碰到的一个案例中,这引起了一个关于搬出借来的上下文的错误.

if let Some(var) = option_var { ... }
Run Code Online (Sandbox Code Playgroud)

(因为它允许Some(ref mut var) = option_var也很方便).

这是有效的,但在这种情况下,我不希望这是一个if声明.写入let Some(var) = option_var;失败,错误"模式None未覆盖".

要明确这个问题不是借用的背景.

可以在let Some(var) = option;语法的情况下使用,其中据了解,这是不是None?解决" None未覆盖模式"警告?或者这只是在if声明之外不支持?

variable-assignment optional rust

1
推荐指数
2
解决办法
725
查看次数