E0059

未匹配的标注

内置函数 trait 是函数参数元组的泛型。如果使用尖括号 (Fn<(T,), Output=U>) 而不是圆括号 (Fn(T) -> U) 来表示函数 trait , 那么类型参数应该是一个元组。否则无法使用函数调用表示法,并且该 trait 将不能由闭包实现。

此错误最可能的原因是使用了尖括号表示法而没有将函数参数类型包装进元组中,例如:

#![feature(unboxed_closures)]

fn foo<F: Fn<i32>>(f: F) -> F::Output { f(3) }

可以通过像下面这样调整 trait 绑定来修复:

#![feature(unboxed_closures)]

fn foo<F: Fn<(i32,)>>(f: F) -> F::Output { f(3) }

注意, (T,) 始终表示包含单个元素 T 类型 的单元组类型。逗号对于消除语法歧义是必需的。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~