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

Rust Intoトレイト

Ruststd::convert::Intoのメモ。


概要

Intoトレイトは、自分のインスタンスを異なる型へ変換する為のintoメソッドを定義しているトレイト
Intoトレイトはstd::preludeに含まれているので、useしなくても使える。

「異なる型への変換」なので、intoメソッドを呼び出すと、元のインスタンスは(所有権を奪われて)使用できなくなる。


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


Intoの例

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

Intoトレイト(抜粋):

pub trait Into<T>: Sized {
    fn into(self) -> T;
}

intoメソッドの引数はselfなので(&self(参照)ではないので)所有権を奪うことに注意。

自分のソース:

struct MyStruct {
    value: i32,
}

impl Into<i32> for MyStruct {
    fn into(self) -> i32 {
        self.value
    }
}

impl Into<i64> for MyStruct {
    fn into(self) -> i64 {
        self.value as i64
    }
}
// 呼び出す例
    let s = MyStruct { value: 123 };
    let n: i32 = s.into();

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

(Javaではメソッドの戻り型のみが異なるオーバーロード(同名のメソッドを複数定義すること)は出来ないので、代入先の型に応じて呼び出すメソッドを変えることは出来ない)


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