LINUX.ORG.RU

Сообщения Gro

 

Shadowing Rust

Всем привет. Разбираюсь с Rust. Наткнулся на shadowing. Вот пример:

    let x = 15;
    println!("x is {}", x);
    let x = 42;
    println!("x is {}", x);
    let x = "A String";
    println!("x is {}", x);
    let x = true;
    println!("x is {}", x);
Я понимаю в сях, питоне или еще где, затенение в отдельных блоках, в ржавчине это тоже есть, но затенение в еще и этом виде, мне кажется может вызвать ошибки в коде. Кроме того, мне сложно представить как это использовать в реальном коде, кроме как let x = x + 1 в каких-нибудь циклах, но в расте из функциональщины достаточно отличных функций, потому вообще не могу представить чтобы в циклах надо было инкрементить переменные. В общем, есть ли реальные причины такого затенения в раст? Или это наследование из ML?

Еще, например, в этом коде:

let mut guess = String::new();
let mut guess = String::new();

Освобождение памяти для переменной из верхней строки будет когда дело дойдет до второй или я не прав? Не потечет ли память, если она не освобождается на второй строке? А если там не string, а моя структура со своей реализацией drop, где я не освобождаю память явно, ржавчина достаточно умен чтобы удалить все за меня?

 ,

Gro
()

RSS подписка на новые темы