Eva*_*oll 3 closures higher-order-functions rust borrow-checker
Rust 有一个关于枚举的方法,称为.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)
Run Code Online (Sandbox Code Playgroud)
这个错误可以通过将第一个闭包替换为来解决.map_or_else
,
Ok(result.clone())
Run Code Online (Sandbox Code Playgroud)
但这是个好主意吗?那我必须要clone()
一根绳子没有好处吗?.map_or_else()
当双方都需要访问同一变量时,惯用的使用方法是什么?