1. 程式人生 > 其它 >【Rust】trait-消除歧義

【Rust】trait-消除歧義

環境

  • Rust 1.56.1
  • VSCode 1.61.2

概念

參考:https://doc.rust-lang.org/rust-by-example/trait/disambiguating.html

示例

如果有兩個同名的方法,這時呼叫的時候,需要使用指定呼叫的型別。

靜態返回

trait UsernameWidget {
    fn get(&self) -> String;
}

trait AgeWidget {
    fn get(&self) -> u8;
}

struct Form {
    username: String,
    age: u8,
}

impl UsernameWidget for Form {
    fn get(&self) -> String {
        self.username.clone()
    }
}

impl AgeWidget for Form {
    fn get(&self) -> u8 {
        self.age
    }
}

fn main() {
    let form = Form {
        username: "rustacean".to_owned(),
        age: 28,
    };
    // 指定型別呼叫
    let username = UsernameWidget::get(&form);
    assert_eq!("rustacean".to_owned(), username);
    let age = <Form as AgeWidget>::get(&form);
    assert_eq!(28, age);
}

總結

瞭解了 Rust 中出現同名方法時,怎麼呼叫特定的某一個方法。

附錄