Rust 将值移动到 map_or_else 的两侧?
Rust moving value into both sides of map_or_else?
Rust 有一个 method on an enum called .map_or_else()
它需要两个闭包,其中一个在 None
上触发,另一个在 Some(inner)
上触发,传递 inner
。
这很好,但我想做的是将一个值移到它的两个分支中。这会产生一个错误,
error[E0382]: borrow of moved value: `result`
--> src/sequence/renderer.rs:124:5
|
104 | let result = match self.display {
| ------ move occurs because `result` has type `String`, which does not implement the `Copy` trait
...
123 | || Ok(result),
| -- ------ variable moved due to use in closure
| |
| value moved into closure here
124 | |v| Ok(format!("{:0>width$}", result.clone(), width=v as usize ))
| ^^^ ------ borrow occurs due to use in closure
| |
| value borrowed here after move)
这个错误可以通过将 .map_or_else
的第一个闭包替换为
来解决
Ok(result.clone())
但这是个好主意吗?那我要clone()
一个字符串有没有用?当双方都需要访问同一个变量时,使用 .map_or_else()
的惯用方法是什么?
不幸的是,这没有办法工作,因为 Rust 无法将这两个闭包注释为“只有一个会被调用”。
所以最好的办法是不要使用更高级别的函数,而是编写一个简单的匹配表达式。
Rust 有一个 method on an enum called .map_or_else()
它需要两个闭包,其中一个在 None
上触发,另一个在 Some(inner)
上触发,传递 inner
。
这很好,但我想做的是将一个值移到它的两个分支中。这会产生一个错误,
error[E0382]: borrow of moved value: `result`
--> src/sequence/renderer.rs:124:5
|
104 | let result = match self.display {
| ------ move occurs because `result` has type `String`, which does not implement the `Copy` trait
...
123 | || Ok(result),
| -- ------ variable moved due to use in closure
| |
| value moved into closure here
124 | |v| Ok(format!("{:0>width$}", result.clone(), width=v as usize ))
| ^^^ ------ borrow occurs due to use in closure
| |
| value borrowed here after move)
这个错误可以通过将 .map_or_else
的第一个闭包替换为
Ok(result.clone())
但这是个好主意吗?那我要clone()
一个字符串有没有用?当双方都需要访问同一个变量时,使用 .map_or_else()
的惯用方法是什么?
不幸的是,这没有办法工作,因为 Rust 无法将这两个闭包注释为“只有一个会被调用”。
所以最好的办法是不要使用更高级别的函数,而是编写一个简单的匹配表达式。