代码示例
fn main() {
let mut state = 0;
// 外部函数
fn outer(state: &mut i32) {
// 嵌套函数
fn inner(state: &mut i32) {
*state += 1;
println!("Inner function: state is now {}", state);
}
inner(state);
println!("Outer function: state is now {}", state);
}
outer(&mut state);
println!("Main function: state is now {}", state);
}
解释
- 局部变量访问和修改:在这个示例中,
outer
函数内部定义了inner
函数。inner
函数能够访问并修改outer
函数传入的state
变量。这展示了嵌套函数可以访问外部函数的局部变量。
- 生命周期:在Rust中,生命周期用于确保引用在其使用期间一直有效。在代码中,
state
变量的生命周期从其声明开始,到main
函数结束。outer
函数接收state
的可变引用&mut i32
,inner
函数同样接收这个可变引用。因为inner
函数在outer
函数内部调用,所以它们使用的引用生命周期与outer
函数使用的引用生命周期一致,这符合Rust的生命周期规则。
- 作用域:
state
变量的作用域是main
函数内部从声明处到函数结束。outer
函数和inner
函数都在main
函数内部定义,inner
函数的作用域在outer
函数内部。这意味着inner
函数只能在outer
函数内部被调用,并且它可以访问outer
函数作用域内的变量,如state
。而outer
函数只能在main
函数内部被调用。