如何为实现PgExecutor的类型实现自定义Trait?遇Executor报错求助
问题原因
你遇到的错误是因为fetch_one方法需要接收一个实现了Executor<'_> trait的参数,但你传入的&self(即&T)并没有被编译器推断为满足该trait约束——尽管T实现了PgExecutor<'a>(而PgExecutor是Executor的子trait),但泛型参数T的引用类型&T的trait实现关系并不会自动被编译器推导出来。
解决方法
在impl的where约束中,显式添加&'_ T: Executor<'_>,告诉编译器T的引用类型也实现了Executor trait:
#[async_trait] impl<'a, T> PgExecutorExt for T where T: PgExecutor<'a> + Sync, // 添加这个约束,确保&T满足Executor要求 &'_ T: Executor<'_> { async fn my_read_method(&self) -> anyhow::Result<()> { sqlx::query_as!(...) .fetch_one(self) .await?; Ok(()) } }
如果你希望更严谨地匹配生命周期,也可以将约束写为&'a T: Executor<'a>,但使用&'_ T: Executor<'_>更灵活,能适配方法调用时的临时生命周期。
内容的提问来源于stack exchange,提问作者JasterV
相关产品推荐
相关产品推荐

