MST

星途 面试题库

面试题:Rust中move关键字在闭包使用里如何影响所有权

请解释在Rust闭包中使用move关键字时,是如何改变闭包捕获变量的所有权的?并通过一个简单的代码示例说明。
45.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

在Rust闭包中,move关键字用于强制闭包获取捕获变量的所有权,而不是默认的借用。这意味着当闭包获取所有权后,原变量在闭包外将不再可用。

示例代码如下:

fn main() {
    let num = 5;
    let closure = move || println!("The number is: {}", num);
    // 这里如果尝试使用 num 会报错,因为所有权已被闭包获取
    // println!("The value of num is: {}", num);

    closure();
}

在上述代码中,move关键字使得闭包closure获取了num的所有权。所以在定义闭包之后,num变量不能在闭包外使用。如果尝试在闭包外使用num,编译器会报错。而闭包closure可以正常使用num,因为它已经拥有了num的所有权。