1

我对 Rust 语言很陌生,并尝试使用 Actix Web 框架。现在我想从一个函数返回以下关闭

let list = || {
    App::new()
        // enable logger
        .wrap(middleware::Logger::default())
        .service(web::resource("/index.html").to(|| async { "Hello world!" }))
        .service(web::resource("/").to(index::home))
        .service(web::resource("/h2").to(index::home2))
};

所以,我可以用

HttpServer::new(routes::list())
.bind("127.0.0.1:8080")?
.run()
.await

那么,Rust 函数的签名将是什么?

4

1 回答 1

1

这就是impl trait的用途:闭包类型本身没有名称,但它允许你说“函数返回一些满足这些 trait 界限的类型”而不用命名类型。所以应该是

fn list() -> impl Fn() -> ???

where???应该替换为返回类型。有关另一个示例,请参见链接中的“impl Trait andclosures”部分。

但请注意,仍然必须有一个返回类型,因此您不能根据某些条件返回多个闭包之一,它们的类型是不同的!

于 2020-05-30T11:12:38.720 回答