不允许在函数和固有方法返回类型之外使用“impl Trait”

San*_*oro 5 traits rust

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);
}
Run Code Online (Sandbox Code Playgroud)

如何向函数传递一个返回impl Trait或在我的情况下的参数impl Responder

它给出的错误是:impl Trait不允许在函数和固有方法返回类型之外。

kab*_*nus 6

你不能 - 文档(和错误)明确表明该impl trait语法只能在从函数返回时使用,以帮助编译器推断事物(关于值)。在您的情况下,您试图谈论有关泛型类型的内容,这是不一样的,因此无法使用此语法。

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

fn service<T, B>(&self, routes: T) -> Self where T: Fn()->B, B: Responder
Run Code Online (Sandbox Code Playgroud)

假设您不需要B其他东西。Noteroutes返回具有特定类型的值,而不是impl trait,并且此类型是您要写出的类型。

  • 检查[此处的进度](https://rust-lang.github.io/impl-trait-initiative/) 在更多地方启用 `impl Trait`, (3认同)