当一个变量被另一个同名变量遮蔽时,就会产生该变量的所有权问题。为了避免这种问题,可以使用rust语言特有的move关键字,将变量的所有权转移给遮蔽该变量的另一个变量。示例如下:
fn main() { let x = "Hello"; let x = x.to_string(); println!("{}", x); }
在这个示例中,第二行代码中的x变量遮蔽了第一行中的x变量。如果不使用move关键字,程序会在编译时抛出如下错误:value borrowed here after move,表示第一个x变量的所有权已经被第二个x变量获取,因此第一个x变量在下一行就不再可用。
fn main() { let x = "Hello"; let x = x.to_string(); println!("{}", x); let x = x; // 将所有权重新赋给x println!("{}", x); }
在这个修改后的示例中,第三行代码中的move关键字将第二个x变量的所有权移交给第三个x变量,因此第一个x变量在第四行仍然处于可用状态。
下一篇:变量被重新初始化的值