トレイトの選択 完全限定構文 (Fully Qualified Syntax)

Fully Qualified Syntax

Fully Qualified Syntax for Disambiguation: Calling Methods with the Same Name https://doc.rust-lang.org/book/ch19-03-advanced-traits.html

fully qualified syntax (完全限定構文?)

<Type as Trait>::function(receiver_if_method, next_arg, ...);

概要

Rustの型(struct, enum)は複数のトレイトを実装することができる。 名前が重複した場合は、どのトレイトの関数を呼び出すかを指定する。

trait A {
    fn name() -> String;
}
trait B {
    fn name() -> String;
}

struct T {}
impl A for T {
    fn name() -> String {
        "I'm a A".to_string()
    }
}
impl B for T {
    fn name() -> String {
        "I'm a B".to_string()
    }
}

fn main() {
    println!("{:?}", <T as A>::name()); // fully qualified syntaxでトレイトを指定する
    println!("{:?}", <T as B>::name());
}