Я строю связанное будущее
ActorFuture<Item = Vec<String>, Error = Vec<String>, Actor = Self>
В случае успеха у него будет вектор строковых выходов всех фьючерсов, связанных с .and_then
.При первой ошибке обработка прекратится, и я хочу вернуть успешные выходы фьючерса и окончательную (неудачную) будущую ошибку.Я хочу использовать один и тот же вектор для обработки обоих путей: хорошо и ошибаться.Но компилятор жалуется:
242 | .map(|o| {v.push(o); v})
| --- value moved (into closure) here
243 | .map_err(|e| {v.push(format!("{}", e)); v})
| ^ value captured here after move
Почему это так?Можно ли одновременно перейти на map
и map_err
?Это никогда не должно происходить в моем понимании.
Пример:
#[test]
fn test_map_and_map_err() {
let mut v = Vec::new();
Ok("foo".to_string())
.map(|i| { v.push(i); v })
.map_err(|e: String| { v.push(e); v });
}
error[E0382]: capture of moved value: `v`
--> src/lib.rs:6:32
|
5 | .map(|i| { v.push(i); v })
| --- value moved (into closure) here
6 | .map_err(|e: String| { v.push(e); v });
| ^ value captured here after move
|
= note: move occurs because `v` has type `std::vec::Vec<std::string::String>`, which does not implement the `Copy` trait