1つの文字列フィールドを持つ単純な構造体があります。
pub struct Chunk {
signature: String
}
この文字列フィールドは単なる文字列にすることはできません。満たす必要のある制約がたくさんあります(コンストラクタに渡された文字列がこれらの制約を満たさない場合、構造体の構築は失敗するはずです)。
C ++のようなオブジェクト指向言語では、必要なチェックを行う明示的なコンストラクターを作成しますが、Rustでこれを行う正しい方法は何ですか?
私はこのコードを思いついた:
impl Chunk {
pub fn new(s: String) -> Option<Chunk> {
if constraints_fail {
None
} else {
Some(Chunk{signature: s})
}
}
}
技術的には、この関数を呼び出さなくても、無効な文字列パラメータを使用して構造体をインスタンス化できるため、これが正しいアプローチかどうかはわかりません。
構造体にはプライベートフィールドが含まれているため、外部からインスタンス化することはできません。これは、試してみると得られるものです。
error[E0451]: field `signature` of struct `Chunk` is private
--> src/main.rs:8:24
|
8 | let _ = Chunk { signature: "xxx".to_owned() };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ private field
他に何もする必要はありませんsignature
。フィールドを非公開にしてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加