FromとIntoは関連性のある型です。
From
From<T>は、struct Uに対して実装するとUをTへ変換できるようになります。例えばStringが持つ::fromによってStringな値を作るのは親しみのある例です。これはimpl<'_> From<&'_ str> for Stringのように定義されています。
String::from("str");上記は、結果どうなるかさえ分かれば以下のようにも書き換えられます。
let _s: String = From::from("str");Into
From<T>が実装される時、自動でInto<U>が実装されます。
impl Into for T
where
U: From, これは少し分かりづらいのでTを&'_ strに置き換えてみます。
impl<'_> Into> for &'_ str これは「&'_ strからFrom<&'_ str>を実装してる型に変換できるよ」という意味になります。
&strに対して::intoを呼んでみます。
let _s: String = "str".into();その時メソッドの中はこのような形で実行されます。
let _s: String = From::<&str>::from("str");上記で見たようにimpl<'_> From<&'_ str> for Stringが実装されてるのでStringへ変換されます。