如何避免在特征实现中两次指定相同的类型?

Vic*_*voy 2 rust

我记得有一种方法可以定义一个特征,这样你就不需要这样写:

trait A<T> {
    fn f();
}

impl A<T> for T {
    fn f() {}
}
Run Code Online (Sandbox Code Playgroud)

据我记得,可以impl A<T> for T像这样缩短线路:

impl A for T {
Run Code Online (Sandbox Code Playgroud)

我不记得这样做的确切配方。我相信有一个与这种缩短相关的术语。

ken*_*ytm 5

您正在寻找的成分是默认类型参数,您可以在其中将T默认设置为Self

trait A<T = Self> {
    fn f();
}

struct Tee;
impl A for Tee {   // the "A" is A<Self>, i.e. A<Tee>.
    fn f() {} 
}
Run Code Online (Sandbox Code Playgroud)

在标准库中,PartialEqtrait 就是使用它的一个例子。