如何使用 turbofish 运算符实现通用特征
How to use turbofish operator for generic trait implementation
我有以下一般特征:
trait A<T> {
fn foo(&self) -> T;
}
我有以下结构,它为 String
和 usize
实现了特征 A
:
struct S;
impl A<String> for S {
fn foo(&self) -> String {
String::from("Hello world")
}
}
impl A<usize> for S {
fn foo(&self) -> usize {
37
}
}
当我调用方法 foo
时,我可以为变量指定类型并且有效:
let value: usize = s.foo();
但是我怎样才能用 turbofish 运算符做同样的事情呢?
我试过以下但没有成功:
let text = s::<usize>.foo();
let text = s.foo::<usize>();
let text = s.::<usize>foo();
如何使用此运算符而不是为变量提供类型?
你不能这样做,因为 "turbofish" 运算符是为 something 指定泛型参数的语法,但你的方法不是泛型的,即使它定义在通用特征,因此没有要指定的通用参数。
你可以做的是使用 fully qualified syntax 显式命名特征,是 generic:
let text = A::<usize>::foo(&s);
我有以下一般特征:
trait A<T> {
fn foo(&self) -> T;
}
我有以下结构,它为 String
和 usize
实现了特征 A
:
struct S;
impl A<String> for S {
fn foo(&self) -> String {
String::from("Hello world")
}
}
impl A<usize> for S {
fn foo(&self) -> usize {
37
}
}
当我调用方法 foo
时,我可以为变量指定类型并且有效:
let value: usize = s.foo();
但是我怎样才能用 turbofish 运算符做同样的事情呢?
我试过以下但没有成功:
let text = s::<usize>.foo();
let text = s.foo::<usize>();
let text = s.::<usize>foo();
如何使用此运算符而不是为变量提供类型?
你不能这样做,因为 "turbofish" 运算符是为 something 指定泛型参数的语法,但你的方法不是泛型的,即使它定义在通用特征,因此没有要指定的通用参数。
你可以做的是使用 fully qualified syntax 显式命名特征,是 generic:
let text = A::<usize>::foo(&s);