使用 FnMut、Fn、FnOnce 作为函数的参数 [duplicate]

Using FnMut, Fn, FnOnce as arguments to a function [duplicate]

提问人:SPQR 提问时间:4/6/2023 最后编辑:ShadowRangerSPQR 更新时间:4/6/2023 访问量:126

问:

我不太明白函数何时/如何使用类型的边界,,。有人可以解释一下这些将在什么场景中使用以及如何使用它们吗?FnFnOnceFnMut

据我了解,我可以创建这样的函数:

struct Dog {
    name: String,
}

struct Cat {
    name: String,
}


fn foo(a: impl FnOnce(Dog) -> Cat) {
    // call a once
}

但是我为什么要将一个函数传递给另一个函数呢?这样做是否有某种好处,例如绕过功能可见性等?

函数 rust 参数 参数传递 first-class-functions

评论

0赞 Daniel A. White 4/6/2023
查找策略模式
0赞 ShadowRanger 4/6/2023
另外:函数指针的意义何在?这不是特定于语言的,Rust 只是将函数类型分为几大类,以支持它提供的各种编译时安全功能,但仅仅能够传递函数在所有语言中都很有用。
1赞 cafce25 4/6/2023
对于其他一些搜索词,在函数式语言中,这个概念被称为“高阶函数”。
0赞 BallpointBen 4/6/2023
看看 std::iter 中的一些函数——它们描绘了一幅非常引人注目的画面,说明为什么你需要将一个函数传递给另一个函数。

答: 暂无答案