goとrustのコンストラクタ
Goではコンストラクタがないので、NewXXXというファクトリ関数を作って初期化します。
RustではGoと同じく組み込みのコンストラクタが存在しないので、Go同様ファクトリ関数でコンストラクタを実装することができる。
# [derive(Debug)]
については https://qiita.com/tarou-imokenpi/items/2a606badb6cdf959a1e1 を参考にしてください。
ビルトインコンストラクタ
RustにはC++と異なってCopy
、Default
、Assignment
、Move
などのようなビルトインコンストラクタの機能はない。
Defaultコンストラスタに関しては、Default
トレイトが同等の機能を提供している。しかし、このトレイトを使用するのは驚くほどレアである。なぜなら、 変数は暗黙には初期化されないからである。 Default
は、 一般的にジェネリックプログラミングでのみ有効。
Default trait
doc.rust-lang.org
Defaultトレイトはdefault()
を持つ。
以下のようにenumでも使用できる
他にもStringや&strでもDefaultトレイトを持っているので、使用することができる。
Defaultマクロ
Defaultマクロを用いると、手動でDefault トレイトを実装しなくても、型に対して自動的にDefaultトレイトの実装を生成してくれる。
再帰的に使うことも可能。
実行すると以下のようになる。
また、enumの場合は以下のようになる。
参考文献
- コンストラクタ