トレイトの選択 完全限定構文 (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()); }