Смещается ли переменная в случае отсутствия выражения?

Почему возникает ошибка "borrow of moved value: `bb`" при добавлении строки `bb;` в коде, которая не должна вызывать перемещение значения? Как можно избежать этой ошибки?
  • 20 апреля 2024 г. 11:50
Ответы на вопрос 2
Да, переменная может сместиться при отсутствии выражения, если это происходит в контексте владения и заимствования в Rust.

Ошибка "borrow of moved value: `bb`" возникает из-за того, что переменная `bb` больше не является действительной после исполнения строки `let bb = b;`, так как она переместилась в новую переменную. При попытке использовать `bb` после этой строки произойдет ошибка.

Чтобы избежать этой ошибки, можно воспользоваться методом клонирования (`.clone()`) для создания копии значения переменной `b` вместо перемещения. Таким образом, измененный код будет выглядеть следующим образом:

```rust
fn main() {
    let a = 5;
    let b = a;
    let bb = b.clone(); // Создание копии значения b
    bb;

    println!("{}", a);
    println!("{}", bb);
}
``` 

Теперь переменная `bb` будет содержать копию значения переменной `b`, и ошибка "borrow of moved value: `bb`" больше не будет возникать.
Если bb; убрать, то всё работает, почему так? Никакого перемещения там не происходит, но компилятор думает иначе.

Перемещение происходит. Семантически это выражение эквивалентно `{ bb }`

Это точно системный язык на котором можно писать серьёзные вещи?

Нет, язык херня. Беги писать на жс

Или тут и правда происходит некое перемещение в параллельную вселенную?

Хорошая привычка — агриться на вещи, которые ты не понимаешь. Далеко пойдёшь.
Похожие вопросы