gpt4 book ai didi

rust - 为什么 sort_by_key 函数需要关闭类型 FnMut 而不是 Fn

转载 作者:行者123 更新时间:2023-12-05 05:32:30 25 4
gpt4 key购买 nike

我是 Rust 编程的新手,正在阅读 Rust 书中的闭包章节。书中提到 sort_by_key 函数需要类型为 FnMut 的闭包,但我想知道 sort_by_key 函数闭包是否不会改变项目那已经被闭包捕获了,为什么不让它成为 Fn 类型呢?

最佳答案

FnMutFn 的超特征.这意味着可以在需要 FnMut 的地方使用 Fn 的任何实例。

为了帮助解释这一点,我在这里扩展了 FnMut 文档中的示例:

fn do_twice<F>(mut func: F)
where F: FnMut()
{
func();
func();
}

fn main() {
let mut x: usize = 1;
{
let add_two_to_x = || x += 2;
do_twice(add_two_to_x);
let print_stuff = || println!("Awesome!");
do_twice(print_stuff);
}
println!("{x}");
}

请注意,在上面的示例中,add_two_to_x 需要 FnMut 而不能与 Fn 一起使用,而 print_stuff 双向工作。

因此,对于 FnMut,您(作为消费者)可以自由实现一个可以改变其环境的闭包,尽管您您没有义务这样做。使用 Fn,您将受到更多限制。

关于rust - 为什么 sort_by_key 函数需要关闭类型 FnMut 而不是 Fn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74099448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com