LINUX.ORG.RU

История изменений

Исправление trex6, (текущая версия) :

Не совсем так. Type deduction может использовать не только x = 0 для выведения типа переменной.

После выведения типа переменной, компилятор определяет (declaration) переменную и выделяет память (definition) в точке let x.

Таким образом она будет существовать до выполнения одной if для обоих веток. Даже если в одной из веток она не используется.

Вот такой пример должен показать что именно я имею в виду (playground):

fn main() {
    let mut x;
    if std::env::args().len() == 0 {
        x = 0;
        println!("X(1):{x}");
    } else {
        // x = 1;
    }
    
    // память под переменную выделенна 
    // независимо от использованной ветки условного оператора
    x = 42_u16;
    println!("X(2):{x}")
}

Исходная версия trex6, :

Не совсем так. Type deduction может использовать не только x = 0 для выведения типа переменной.

После выведения типа переменной, компилятор определяет (declaration) переменную и выделяет память (definition) в точке let x.

Таким образом она будет существовать до выполнения одной if для обоих веток. Даже если в одной из веток она не используется.

Вот такой пример должен показать что именно я имею в виду playground:

fn main() {
    let mut x;
    if std::env::args().len() == 0 {
        x = 0;
        println!("X(1):{x}");
    } else {
        // x = 1;
    }
    
    // память под переменную выделенна 
    // независимо от использованной ветки условного оператора
    x = 42_u16;
    println!("X(2):{x}")
}