`impl Trait` 不能用于函数和内在方法以外的返回类型。

5
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);
}

我该如何将一个返回 impl Trait (或在我这种情况下返回 impl Responder)的参数传递给函数?
该错误提示为:“impl Trait” 不允许出现在函数和内部方法的返回类型之外。
1个回答

6
无法实现 - 文档(以及错误)明确指出,impl trait 语法仅适用于从函数返回值以帮助编译器推导有关值的事情。在您的情况下,您正在尝试表达有关通用类型的内容,这不同,因此不能使用此语法。
相反,您必须指定一个类型,即具有约束条件的通用类型:
fn service<T, B>(&self, routes: T) -> Self where T: Fn()->B, B: Responder

假设您不需要B来完成其他任务。注意,routes返回一个具有特定类型的值,而不是一个impl trait,您正在尝试将该类型写出。

3
查看此处的进展,以了解在更多场景下启用 impl Trait 的情况。 - michael_j_ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接