gpt4 book ai didi

function - 为什么 Rust 中的闭包和函数之间存在巨大差异以及如何解决它?

转载 作者:行者123 更新时间:2023-11-29 08:04:24 25 4
gpt4 key购买 nike

我刚遇到 Rust 如何处理闭包的问题。

假设我是一个库作者并且编写了这个方法

fn get(&mut self, handler: fn() -> &str){
//do something with handler
}

现在如果用户想像这样调用这个方法

let foo = "str";
server.get(|| -> &str { foo });

它不会工作,因为 Rust,according to it's documentation常规函数和闭包之间有很大的区别。

作为库作者,我是否总是必须让此类方法接受闭包而不是常规函数,以免对库用户施加过多限制?

在我看来,闭包似乎是编写匿名函数的唯一方式,还是我错了?

最佳答案

目前,fn() 类型可以自动“升级”为|| 类型。 (我想是一个带有空环境的闭包。)例如,这是可行的:

fn get(handler: || -> &str) -> &str {
handler()
}

fn main() {
fn handler_fn() -> &str { "handler_fn" }
let handler_cl = || -> &str "handler_cl";
println!("{}", get(handler_fn));
println!("{}", get(handler_cl));
}

因此,如果您的库函数 get 不关心 handler 是否为闭包,那么为了最大的灵 active 而只接受闭包似乎是合理的。但这并不总是可能的。例如,如果你想在另一个任务中执行handler,那么我相信它必须是fnproc类型。 (我在这里不是 100% 确定——我可能遗漏了一个细节。)

关于匿名函数,是的,||proc 闭包是编写匿名函数的仅有的两种方法。

关于function - 为什么 Rust 中的闭包和函数之间存在巨大差异以及如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859292/

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