面试题答案
一键面试1. 变量可变性对命名规范的影响
在Rust中,虽然没有严格的命名规则强制要求在变量名中体现可变性,但为了提高代码的可读性和维护性,一种常见的做法是在可变变量名前添加前缀 mut_
。例如:
let mut mut_variable = 5;
这样,在阅读代码时,开发者可以很容易地识别出这个变量是可变的。对于不可变变量,则使用常规的命名方式,比如遵循驼峰命名法或蛇形命名法:
let immutable_variable = 10;
2. 不同作用域下可变性对变量命名及使用的限制和要求
- 块级作用域:在一个块
{}
内定义的可变变量,其作用域仅限于该块。在块内可以对可变变量进行修改。例如:
{
let mut inner_mut_var = 20;
inner_mut_var += 10;
println!("Inner mutable variable: {}", inner_mut_var);
}
// 这里访问 inner_mut_var 会报错,因为它已超出作用域
不可变变量同样作用域限于块内,但不能在块内修改。
- 函数参数作用域:函数参数中的可变变量允许在函数内部修改,而不可变参数不能被修改。例如:
fn modify_variable(mut param: i32) {
param += 5;
println!("Modified parameter: {}", param);
}
let num = 30;
modify_variable(num);
这里 param
是可变的,可以在函数内修改。如果参数声明为不可变,如 fn take_variable(param: i32)
,则在函数内不能修改 param
。
- 嵌套作用域:当存在嵌套作用域时,内层作用域可以访问外层作用域的变量,但可变变量的修改遵循作用域规则。如果内层作用域重新定义了与外层作用域同名的变量(无论是可变还是不可变),则内层作用域会遮蔽外层作用域的变量。例如:
let outer_var = 40;
{
let outer_var = 50; // 遮蔽了外层的 outer_var
let mut inner_mut = outer_var;
inner_mut += 10;
println!("Inner mutable with shadowed outer: {}", inner_mut);
}
println!("Outer variable after shadowing: {}", outer_var); // 输出 40
对于可变变量,在内层作用域修改它不会影响外层作用域同名的不可变变量(如果存在遮蔽情况)。同时,在同一作用域内不能同时定义同名的可变和不可变变量。