yohhoyの日記

技術的メモをしていきたい日記

From/Intoトレイトと反射律

Rust標準ライブラリが提供する std::convert::From トレイトは、任意の型に対して反射律(reflexive law)を満たす。Fromトレイトにより実装される std::convert::Into トレイトもまた反射律を満たす。[本記事はRust 1.12/Stable準拠]

struct T;
let v1: T = From::from(T);  // OK: T→Tへ変換
let v2: T = Into::into(T);  // OK: T→Tへ変換

Rust標準ライブラリ(libcore/convert.rs)実装より引用。

impl<T, U> Into<U> for T where U: From<T> {
    fn into(self) -> U {
        U::from(self)
    }
}

impl<T> From<T> for T {
  fn from(t: T) -> T { t }
}