Rust `impl Trait`不允许在函数和固有方法返回类型之外 特质应答器{ } 结构应用程序; impl应用程序{ fn new()->Self{ 自{} } fn服务(&self,routes:T)->self其中T:fn()->impl响应程序{ 自{} } } 结构路由{ 数据:字符串, } 路由的impl响应程序{ } fn routes()->impl响应程序{ 路线{ 数据:“Hello”。to_string() } } fn main(){ //让新路线=路线; App::new().服务(路由); }

Rust `impl Trait`不允许在函数和固有方法返回类型之外 特质应答器{ } 结构应用程序; impl应用程序{ fn new()->Self{ 自{} } fn服务(&self,routes:T)->self其中T:fn()->impl响应程序{ 自{} } } 结构路由{ 数据:字符串, } 路由的impl响应程序{ } fn routes()->impl响应程序{ 路线{ 数据:“Hello”。to_string() } } fn main(){ //让新路线=路线; App::new().服务(路由); },rust,traits,Rust,Traits,如何向函数传递返回“impl Trait”或在我的例子中是“impl Responder”的参数。 它给出的错误是:impl Trait不允许在函数和固有方法返回类型之外使用。您不能-文档(和错误)明确指出,impl Trait语法只能在从函数返回值时使用,以帮助编译器推断(关于值)。在你的例子中,你试图说一些关于泛型类型的话,这是不一样的,因此不能使用这种语法 相反,您必须指定一个类型,在您的情况下是一个带有约束的泛型类型: trait Responder{ } struct App; imp

如何向函数传递返回“impl Trait”或在我的例子中是“impl Responder”的参数。 它给出的错误是:
impl Trait
不允许在函数和固有方法返回类型之外使用。

您不能-文档(和错误)明确指出,
impl Trait
语法只能在从函数返回值时使用,以帮助编译器推断(关于值)。在你的例子中,你试图说一些关于泛型类型的话,这是不一样的,因此不能使用这种语法

相反,您必须指定一个类型,在您的情况下是一个带有约束的泛型类型:

trait Responder{
}
struct App;
impl App {
    fn new() -> Self {
        Self {}
    }
    fn service<T, B>(&self, routes: T) -> Self where T: Fn()-> impl Responder {
        Self {}
    }
}
struct Routes {
    data:String,
}
impl Responder for Routes{
}
fn routes() -> impl Responder {
    Routes {
        data: "Hello".to_string()
    }
}

fn main() {
    // let new_routes = routes;
    App::new().service(routes);
}
fn服务(&self,routes:T)->self其中T:fn()->B,B:Responder
假设您不需要
B
来做其他事情。注意
routes
返回一个具有特定类型的值,而不是
impl trait
,此类型正是您试图写出的

fn service<T, B>(&self, routes: T) -> Self where T: Fn()->B, B: Responder