S-JIS[2024-09-19] 変更履歴

Rust Fromトレイト

Ruststd::convert::Fromのメモ。


概要

Fromトレイトは、異なる型から自分のインスタンスを生成する為のfromメソッドを定義しているトレイト
Fromトレイトはstd::preludeに含まれているので、useしなくても使える。


また、Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。


Fromの例

引数の型ごとにfromメソッドを用意する。

Fromトレイト(抜粋):

pub trait From<T>: Sized {
    fn from(value: T) -> Self;
}

自分のソース:

struct MyStruct {
    value: i32,
}

impl From<i32> for MyStruct {
    fn from(value: i32) -> Self {
        MyStruct { value }
    }
}

impl From<i64> for MyStruct {
    fn from(value: i64) -> Self {
        MyStruct {
            value: value as i32,
        }
    }
}
// 呼び出す例
    let s = MyStruct::from(123);
    let s = MyStruct::from(123_i64);
×  let s = MyStruct::from(123_f32); // 合致する型が無いのでコンパイルエラー
    println!("s.value={}", s.value);

呼び出す側の引数の型に応じて、合致するメソッドが呼ばれる。
合致する型が無いときはコンパイルエラーになる。


Intoトレイト

Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。

    let s: MyStruct = 123.into();	// intoメソッドはIntoトレイトから来たメソッド
    let s: MyStruct = 123_i64.into();	

Fromトレイトの型引数で指定した型のインスタンスで、intoメソッドが使用できる。


stdへ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま