来个大佬教教我,这个闭包体为什么是 FnOnce

查看 59|回复 2
作者:Number13   
下面这段代码中,闭包体为什么变成了 FnOnce ?是因为 Value 被 push 到 vec 中,导致所有权转移,所以 rust 认为它是 FnOnce 的闭包体了么?还是因为什么?求解答
#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}
fn main() {
    let mut list = [
        Rectangle { width: 10, height: 1 },
        Rectangle { width: 3, height: 5 },
        Rectangle { width: 7, height: 12 },
    ];
    let mut sort_operations = vec![];
    let  value = String::from("by key called");
    list.sort_by_key(|r| {
        sort_operations.push(value);    // 如果这里改成 sort_operations.push(value.clone());
                                        // 那么这个闭包体就是 FnMut 类型了
        r.width
    });
    println!("{:#?}", list);
}

闭包体, width, rectangle, height

hsfzxjy   
这段代码里闭包也是 FnMut 呀
BBCCBB   
应该就是所有权吧. value move 到了这个闭包里.
您需要登录后才可以回帖 登录 | 立即注册

返回顶部