面试题答案
一键面试在这段代码中,在main
函数内部的内层花括号中定义了变量y
。当程序执行到内层花括号结束时,y
的作用域结束。
当在// 在这里尝试访问y会发生什么?
这一行尝试访问y
时,会导致编译错误。因为Rust的变量作用域规则规定,变量的作用域从声明点开始,到包含该声明的最近的花括号结束。
y
是在内层花括号内声明的,所以它的作用域仅限于该内层花括号。一旦程序离开这个花括号,y
就不再有效,不能被访问。
例如,尝试编译如下修改后的代码:
fn main() {
let x = 5;
{
let y = x + 3;
println!("Inner: y = {}", y);
}
println!("Outer: y = {}", y); // 这里尝试访问y
}
会得到类似如下的编译错误:
error[E0425]: cannot find value `y` in this scope
--> src/main.rs:7:28
|
7 | println!("Outer: y = {}", y);
| ^ not found in this scope
总结来说,Rust通过花括号来界定变量的作用域,超出作用域访问变量会导致编译错误。