我在Rust书中看到,您可以使用相同的名称定义两个不同的变量:
let hello = "Hello";
let hello = "Goodbye";
println!("My variable hello contains: {}", hello);
Run Code Online (Sandbox Code Playgroud)
打印出:
My variable hello contains: Goodbye
Run Code Online (Sandbox Code Playgroud)
第一次打招呼怎么了?它被释放了吗?我怎么能访问它?
我知道将两个变量命名为相同会很糟糕,但如果这种情况偶然发生,因为我将其声明为100行以下,这可能是一个真正的痛苦.
根据Rust的书,"当一个绑定超出范围时,它们被绑定的资源被释放".这也适用于阴影吗?
例:
fn foo() {
let v = vec![1, 2, 3];
// ... Some stuff
let v = vec![4, 5, 6]; // Is the above vector freed here?
// ... More stuff
} // Or here?
Run Code Online (Sandbox Code Playgroud) 如果在创建绑定时使用自动类型推导,如何知道绑定的类型?如果右侧的表达式是借位(如let x = &5;),它将是值还是借位呢?如果我重新分配借入或价值会怎样?
仅作支票,如果我使用let mut x: &mut T = &mut T{};或let mut x:&T = & T{};,我可以重新分配借贷,对吗?