Fromトレイトは、異なる型から自分のインスタンスを生成する為のfromメソッドを定義しているトレイト。
Fromトレイトはstd::preludeに含まれているので、useしなくても使える。
また、Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。
引数の型ごとに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);
呼び出す側の引数の型に応じて、合致するメソッドが呼ばれる。
合致する型が無いときはコンパイルエラーになる。
Fromトレイトを実装すると、相手の型に対して自動的にIntoトレイトが実装される。
let s: MyStruct = 123.into(); // intoメソッドはIntoトレイトから来たメソッド let s: MyStruct = 123_i64.into();
Fromトレイトの型引数で指定した型のインスタンスで、intoメソッドが使用できる。