请教诸位一个问题:
trait
的 泛型,是不是只能用 Trait::<type>::fn
这种形式声明?(无法直接在链式调用中声明)
即:无法直接以 exp.fn
的形式声明其对应 trait
的泛型。
例子:
trait A<R>: Sized {
fn as_ok(self) -> Result<Self, R> {
Ok(self)
}
}
impl<T, R> A<R> for T {}
fn main() {
// trait 的 泛型,是不是只能用 Trait::<type>::fn 这种形式声明?
A::<&str>::as_ok(0);
// 即:无法直接在链式调用中声明
0.as_ok();
}
注意:我要的是声明类型,而不是推导类型。所有在绑定变量处或函数返回签名处指定类型的做法都属于类型推导,不在讨论范围内。
1
共 4 条评论, 1 页
评论区
写评论rust的范型 完全限定语法 会在编译器按限定类型自行生成一份特定类型对应的函数 所以不指定没法确定调用主体的类型是什么 又是谁
因为你这里定义了 trait 泛型参数,无论如何都要在使用时指明这个泛型参数
R
为哪个具体类型,所以没法简化。不过如果你能把 implementation 的范围写得具体一些(指明泛型参数
R
的具体类型),那么就可以直接调用:你可以直接使用完全限定语法 (Fully Qualified Syntax):
感谢QQ群友
idyllan
的回复,现已知一种非 stable 方式可以在链式调用中声明: