作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
过去一周我一直在研究 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/
我是一名优秀的程序员,十分优秀!