Destructure, what is this?


#1

Hello! I have a problev! I read a line from the console, and then add it up into a vector.

Compiler write this:

io::stdin().read_line(&mut st1).expect("Не удалось считать строку");

| ^^^ value used here after move

my code:
let mut st1 = String::new();
let mut st2 = String::new();

let mut vec_word1 = Vec::new();
let mur vec_word2 = Vec::new();

println!("Введите слово на русском: ");
io::stdin().read_line(&mut st1).expect("Не удалось считать строку");

if st1.trim() == ("045") {
    break;
}

println!("Введите слово на английский: ");
io::stdin().read_line(&mut st2).expect("Не удалось считать строку");

if st2.trim() == ("045").to_string() {
    break;
} else {
    vec_word1.push(st1);
    vec_word2.push(st2);
    println!("{} = {}", vec_word1[0], vec_word2[1]);
}

#2

Works just fine for me: http://play.integer32.com/?gist=375e1248ff76514e6fd17c577e53f2fc&version=stable


#3

I can’t open this link to see


#4

Слушай, это же ты?


#5

Слушай, это же ты?

Yep, that’s me :slight_smile:

I can’t open this link to see

Strange… Ok, here’s the exact code that compiles:

use std::io;

fn main() {
    loop {
        let mut st1 = String::new();
        let mut st2 = String::new();

        let mut vec_word1 = Vec::new();
        let mut vec_word2 = Vec::new();

        println!("Введите слово на русском: ");
        io::stdin().read_line(&mut st1).expect("Не удалось считать строку");

        if st1.trim() == ("045") {
            break;
        }

        println!("Введите слово на английский: ");
        io::stdin().read_line(&mut st2).expect("Не удалось считать строку");

        if st2.trim() == ("045").to_string() {
            break;
        } else {
            vec_word1.push(st1);
            vec_word2.push(st2);
            println!("{} = {}", vec_word1[0], vec_word2[1]);
        }
    }
}

#6

Буду писать на русском, мне так проще)
Я нашёл ошибку. Она состоит в том, что создание связей происходит до цикла loop. То есть объявление происходит до цикла, а использование и добавление происходит внутри цикла.

Про это я не говорил выше, мой косяк. Но спасибо!


#7

Снова неполадки. В вектор значения не добавляются, а заменяются.
vec_word1.push(st1);
vec_word2.push(st2);


#8

Снова неполадки. В вектор значения не добавляются, а заменяются.

Ну видимо ты вектор внутри цикла создаешь, как в коде выше?


#9

Да, исправил, всё заработало, спасибо!