読者です 読者をやめる 読者になる 読者になる

0x90

一回休み

Rustの知見その2

貯まる貯まる

trait中での自分自身の型情報

Selfで取れる。デフォルト定義中で使える。

trait Hoge {
    fn fuga() -> piyo {
        foomethod::<Self>()
    }
}

空タプル

空タプル()は、型名として扱えるとき、インスタンスとして扱われるときの二通りがある。前者は例えば関数定義や、trait中など。

後者は、たとえば()に対してtraitを実装できて、

trait Hoge {
    fn fuga(&self) -> i64;
}

impl Hoge for () {
    fn fuga(&self) -> i64 {
        -1
    }
}

みたいなコードを書いて、().fuga()とするときなど。この時、fugaの定義をfn fuga() -> i64としても、()::fuga()コンパイルエラーになる。

ちなみに、関数の返り値がないことと返り値が空タプルであることは同義なので、空タプルを返す関数の返り値は無視しても問題ない。