gpt4 book ai didi

function-pointers - 如何在 Rust 中将匿名函数作为参数传递?

转载 作者:行者123 更新时间:2023-11-29 07:42:28 24 4
gpt4 key购买 nike

过去一周我一直在研究 Rust。我似乎无法弄清楚如何在调用方法时传递定义为参数的函数,并且没有遇到任何文档显示它们以这种方式使用。

Rust中调用函数时是否可以在参数列表中定义函数?

这是我迄今为止尝试过的...

fn main() {

// This works
thing_to_do(able_to_pass);

// Does not work
thing_to_do(fn() {
println!("found fn in indent position");
});

// Not the same type
thing_to_do(|| {
println!("mismatched types: expected `fn()` but found `||`")
});
}

fn thing_to_do(execute: fn()) {
execute();
}

fn able_to_pass() {
println!("Hey, I worked!");
}

最佳答案

在 Rust 1.0 中,闭包参数的语法如下:

fn main() {
thing_to_do(able_to_pass);

thing_to_do(|| {
println!("works!");
});
}

fn thing_to_do<F: FnOnce()>(func: F) {
func();
}

fn able_to_pass() {
println!("works!");
}

我们定义了一个受限于闭包特征之一的泛型:FnOnce , FnMut , 或 Fn .

与 Rust 中的其他地方一样,您可以改用 where 子句:

fn thing_to_do<F>(func: F) 
where F: FnOnce(),
{
func();
}

您可能还想参加 a trait object instead :

fn main() {
thing_to_do(&able_to_pass);

thing_to_do(&|| {
println!("works!");
});
}

fn thing_to_do(func: &Fn()) {
func();
}

fn able_to_pass() {
println!("works!");
}

关于function-pointers - 如何在 Rust 中将匿名函数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182565/

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