如何将 fn 指针转换为闭包

How to transform fn pointer into closure

提问人:patrick18 提问时间:1/9/2023 最后编辑:Adrian Molepatrick18 更新时间:1/25/2023 访问量:59

问:

对于没有参数的 rust 函数,它们的函数指针可以作为闭包传递,如下所示:

fn foo(){//doing sth}
fn main(){
    thread::spawn(foo).join().unwrap();
};

但是,带参数的函数呢?喜欢:

fn foo(x:i32,y:i32)->i32{//doing sth with x and y}
fn main(){
    thread::spawn(foo).join().unwrap();
};

报告错误如下:

4 |     thread::spawn(foo).join().unwrap();
  |     ------------- ^^^ expected function that takes 0 arguments
功能 防锈 闭包

评论

0赞 Chayim Friedman 1/9/2023
这是最简单的代码。
0赞 Jörg W Mittag 1/9/2023
如果您有两个问题,请问两个问题,而不是一个问题包含两个问题。此外,使用标准术语(例如部分应用无点样式)可能是有意义的,这样可以更容易地理解您在说什么。(如果我理解正确的话,这就是你在说的,但有点难以弄清楚,正是因为你没有使用标准术语。
0赞 rodrigo 1/9/2023
但采用泛型指针,而不是函数指针。只要做就行了。thread::spawn()Fn()thread::spawn(|| foo(1, 2))
0赞 patrick18 1/9/2023
@rodrigo 谢谢!尽管如此,我还是想知道有一种优雅的方式来处理带有参数的函数。:)
1赞 cafce25 1/9/2023
如果不是从您以某种方式传递它们,您认为编译器从哪里获取 2 个参数?

答:

0赞 patrick18 1/25/2023 #1

好了,现在我明白了我想问的是 rust 是否支持函数咖喱,这是我之前在 scala 中遇到的一个技能。