Open1

rust / コンパイラが判断できない場合は型を付与することで、呼び出すメソッドが変わる

katayama8000katayama8000
pub fn run() {
    let str = String::from("Hello");
    let result1: &str = str.as_ref();
    println!("{:?}", result1);
    let result2: &[u8] = str.as_ref();
    println!("{:?}", result2);

    let person: Person<i64> = 20.into();
    println!("{:?}", person);

    let person = Person { age: 32 };
    let age: i32 = person.into();
}

#[derive(Debug)]
struct Person<T> {
    age: T,
}

impl Into<Person<i32>> for i32 {
    fn into(self) -> Person<i32> {
        println!("i32");
        Person { age: self }
    }
}

impl Into<Person<i64>> for i64 {
    fn into(self) -> Person<i64> {
        println!("i64");
        Person { age: self + 100 }
    }
}

impl Into<i32> for Person<i32> {
    fn into(self) -> i32 {
        self.age
    }
}

impl Into<i64> for Person<i32> {
    fn into(self) -> i64 {
        self.age as i64
    }
}