При использовании match
для изменения изменяемой переменной я не нашел способа использовать match
таким образом, чтобы он гарантированно не был исчерпывающим и не требовал clone
.
* 1005.*
error[E0507]: cannot move out of borrowed content
--> src/main.rs:19:20
|
19 | *x = match *x {
| ^^ cannot move out of borrowed content
...
25 | Bar::SomeStuff(thing) => panic!("not sure"),
| ----- hint: to prevent move, use `ref thing` or `ref mut thing`
Я намереваюсь написать Bar::SomeStuff(thing) => Bar::SomeStuff(thing)
и фактически оставить его без изменений, но я не могу перейти с помощью заимствования или ссылки.
Bar::SomeStuff(thing.clone())
может работать, но копирование большой структурыможет быть очень дорого.
Удаление *x =
и изменение на ()
также может работать, но я возвращаю только перечисление Bar
, поэтому я надеюсь сохранить компилятор, проверяющий тип возвращаемого значения.