コンストラクター
説明
Rust には、言語構成要素としてのコンストラクターはありません。代わりに、
オブジェクトを作成するには、関連関数 new を使用するのが慣例です。
#![allow(unused)]
fn main() {
/// 秒単位の時間。
///
/// # 例
///
/// ```
/// let s = Second::new(42);
/// assert_eq!(42, s.value());
/// ```
pub struct Second {
value: u64,
}
impl Second {
// [`Second`] の新しいインスタンスを構築します。
// これは関連関数であり、self がないことに注意してください。
pub fn new(value: u64) -> Self {
Self { value }
}
/// 秒単位の値を返します。
pub fn value(&self) -> u64 {
self.value
}
}
}
デフォルトコンストラクター
Rust は Default トレイトによるデフォルトコンストラクターをサポートしています。
#![allow(unused)]
fn main() {
/// 秒単位の時間。
///
/// # 例
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
pub struct Second {
value: u64,
}
impl Second {
/// 秒単位の値を返します。
pub fn value(&self) -> u64 {
self.value
}
}
impl Default for Second {
fn default() -> Self {
Self { value: 0 }
}
}
}
Second の場合と同様に、すべてのフィールドのすべての型が Default を実装している場合、Default を導出することもできます。
#![allow(unused)]
fn main() {
/// 秒単位の時間。
///
/// # 例
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
#[derive(Default)]
pub struct Second {
value: u64,
}
impl Second {
/// 秒単位の値を返します。
pub fn value(&self) -> u64 {
self.value
}
}
}
注: 型が Default と、引数を取らない new コンストラクターの両方を実装することは一般的であり、期待されています。new は Rust におけるコンストラクターの慣例であり、ユーザーはそれが存在することを期待します。そのため、基本的なコンストラクターが引数を取らなくても問題ない場合は、たとえ機能的に default と同一であっても、そうすべきです。
ヒント: Default を実装または導出する利点は、Default の実装が必要な場所でその型を使用できるようになることです。最も代表的な例は、標準ライブラリの *or_default 関数のいずれかです。
関連項目
-
Defaultトレイトのより詳細な説明については、default イディオムを参照してください。 -
複数の構成があるオブジェクトを構築するためのビルダーパターン。
-
Defaultとnewの両方を実装することについては、API Guidelines/C-COMMON-TRAITSを参照してください。