Here is a link to a playground
这是代码(为了可读性而剥离):
#[async_trait]
impl <'a, FUNC, CONTEXT, PARAM, RETURN, FUT> StepWithParams<CONTEXT, PARAM, RETURN> for FUNC
where
FUNC: FnOnce(&'a PARAM) -> FUT + Send + Sync,
FUT: Future<Output = Result<RETURN, ErrTypes>> + Send + Sync,
PARAM: Send + Sync,
CONTEXT: Send + Sync,
RETURN: Send + Sync,
{
async fn run_user_step (self, request_context: &'a CONTEXT) -> Result<RETURN, ErrTypes> {
let param = PARAM::from_context(request_context);
self(param).await
}
}
字符串
完整版本链接在操场上。编译此将生成编译器错误,如下所示:
error[E0207]: the type parameter `FUT` is not constrained by the impl trait, self type, or predicates
--> src/main.rs:22:41
|
22 | impl <'a, FUNC, CONTEXT, PARAM, RETURN, FUT> StepWithParams<CONTEXT, PARAM, RETURN> for FUNC
| ^^^ unconstrained type parameter
For more information about this error, try `rustc --explain E0207`.
型
但是,泛型参数不是明显受到约束吗?
1条答案
按热度按时间klh5stk11#
从参考:
如果泛型参数在以下之一中至少出现一次,则该参数约束实现:
因为你写的是一个blanket implementation,所以后面两个项目符号是不相关的(除非你给Festival添加额外的trait bounds)。所以你需要给trait定义添加FUT,这意味着impl块开始:
字符串
在编译器的指导下进行了一些其他的整理,最终得到了这个playground
错误详细信息链接到的error code details和original RFC也提供了给予更多的背景信息。