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
へ変換されます。