blockの巣

Rustの関連型のデフォルトについて

2023/07/07 01:31 公開
Rust

2023/07/06現在、stable環境ではRustの関連型(associated type)のデフォルトは定義できません。

The Rust RFC Bookの2532-associated-type-defaultsに詳細が書かれています。
issueを見ると半数ほどのタスクが終わっているのと、nightly環境では#![feature(associated_type_defaults)]をつけることで動作させられることが確認できます。

試しにnightly環境で以下のようなコードを書いてみたところコンパイルが通りました

#![feature(associated_type_defaults)]

trait Foo {
    type AT = i32;
}

struct A;

impl Foo for A {}

fn main() {}

Rust Playgroundで確認

stable環境ではFooの中のtype AT = i32の部分でコンパイルエラーが発生します。


色々と 悪用 活用できそうな機能ですがいい感じのコードを書けなかったので何かあれば更新します。