インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

Ach113

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]

編集
0

コメントを追加

0

関連記事

分類Dev

構造体のすべてのフィールドをOOPのコンストラクターのように強制的に埋めるにはどうすればよいですか?

分類Dev

構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

分類Dev

その配列へのポインタを使用して、構造体の配列に含まれる構造体のフィールドにアクセスするにはどうすればよいですか?[C ++]

分類Dev

構造体が(インターフェースのために)制約になってしまい、コンパイラーが不機嫌になった場合はどうすればよいですか?

分類Dev

「移動値を使用」エラーを取得せずに、ボックス化された構造体の複数のフィールドをバインドするにはどうすればよいですか?

分類Dev

Matlabの構造体から別の構造体にフィールド値をエクスポートするにはどうすればよいですか?

分類Dev

構造体フィールドで型スイッチを使用するにはどうすればよいですか(フィールドがインターフェイス型の場合)?

分類Dev

構造体を物理的に作成せずに、構造体のReflect.Typeインスタンスを取得するにはどうすればよいですか?

分類Dev

リフレクトを使用して構造体のスライスのフィールドを変更するにはどうすればよいですか?

分類Dev

リフレクトを使用して、構造体フィールドのタイプがインターフェースかどうかを確認するにはどうすればよいですか?

分類Dev

matchステートメントでインスタンス化された構造体値を使用するにはどうすればよいですか?

分類Dev

JSONに構造体のフィールドを動的に含めたり除外したりするにはどうすればよいですか?

分類Dev

このバックエンドをリセットするためにロガーバックエンドをブーストするための共有ポインターを持つ構造体のマルチインデックスの修飾子を作成するにはどうすればよいですか?

分類Dev

インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

分類Dev

スライス内の構造体のフィールドを設定するにはどうすればよいですか?

分類Dev

構造体のインスタンスにグローバルにアクセスするにはどうすればよいですか?

分類Dev

構造体配列にフィールドを追加するにはどうすればよいですか?

分類Dev

pysparkデータフレームのネストされた構造体に列を追加するにはどうすればよいですか?

分類Dev

svg :: node :: Valueタプル構造体の単一の文字列フィールドにアクセスするにはどうすればよいですか?

分類Dev

構造体に特性フィールドを含めるにはどうすればよいですか?

分類Dev

エクスプローラーのファイルツリー構造にインデントを追加するにはどうすればよいですか?

分類Dev

不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

分類Dev

Racketでコンパイル時の構造体メタデータを提供しながら構造体コンストラクターをオーバーライドするにはどうすればよいですか?

分類Dev

GoでフラットなJSONオブジェクトになるように、埋め込まれた構造体フィールドを持つ構造体をマーシャリングするにはどうすればよいですか?

分類Dev

シーケンス関連の制約に基づいて行をフィルタリングするにはどうすればよいですか?

分類Dev

ANSI C:構造体フィールドを抽象化するにはどうすればよいですか?

分類Dev

可変フィールドと不変フィールドの両方で構造体を初期化するにはどうすればよいですか?

分類Dev

C ++ソースでThrift構造体のフィールドを適切に設定するにはどうすればよいですか?

分類Dev

ヘッダーファイルで宣言された構造体変数を複数のソースファイルにインクルードするにはどうすればよいですか?

Related 関連記事

  1. 1

    構造体のすべてのフィールドをOOPのコンストラクターのように強制的に埋めるにはどうすればよいですか?

  2. 2

    構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

  3. 3

    その配列へのポインタを使用して、構造体の配列に含まれる構造体のフィールドにアクセスするにはどうすればよいですか?[C ++]

  4. 4

    構造体が(インターフェースのために)制約になってしまい、コンパイラーが不機嫌になった場合はどうすればよいですか?

  5. 5

    「移動値を使用」エラーを取得せずに、ボックス化された構造体の複数のフィールドをバインドするにはどうすればよいですか?

  6. 6

    Matlabの構造体から別の構造体にフィールド値をエクスポートするにはどうすればよいですか?

  7. 7

    構造体フィールドで型スイッチを使用するにはどうすればよいですか(フィールドがインターフェイス型の場合)?

  8. 8

    構造体を物理的に作成せずに、構造体のReflect.Typeインスタンスを取得するにはどうすればよいですか?

  9. 9

    リフレクトを使用して構造体のスライスのフィールドを変更するにはどうすればよいですか?

  10. 10

    リフレクトを使用して、構造体フィールドのタイプがインターフェースかどうかを確認するにはどうすればよいですか?

  11. 11

    matchステートメントでインスタンス化された構造体値を使用するにはどうすればよいですか?

  12. 12

    JSONに構造体のフィールドを動的に含めたり除外したりするにはどうすればよいですか?

  13. 13

    このバックエンドをリセットするためにロガーバックエンドをブーストするための共有ポインターを持つ構造体のマルチインデックスの修飾子を作成するにはどうすればよいですか?

  14. 14

    インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

  15. 15

    スライス内の構造体のフィールドを設定するにはどうすればよいですか?

  16. 16

    構造体のインスタンスにグローバルにアクセスするにはどうすればよいですか?

  17. 17

    構造体配列にフィールドを追加するにはどうすればよいですか?

  18. 18

    pysparkデータフレームのネストされた構造体に列を追加するにはどうすればよいですか?

  19. 19

    svg :: node :: Valueタプル構造体の単一の文字列フィールドにアクセスするにはどうすればよいですか?

  20. 20

    構造体に特性フィールドを含めるにはどうすればよいですか?

  21. 21

    エクスプローラーのファイルツリー構造にインデントを追加するにはどうすればよいですか?

  22. 22

    不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

  23. 23

    Racketでコンパイル時の構造体メタデータを提供しながら構造体コンストラクターをオーバーライドするにはどうすればよいですか?

  24. 24

    GoでフラットなJSONオブジェクトになるように、埋め込まれた構造体フィールドを持つ構造体をマーシャリングするにはどうすればよいですか?

  25. 25

    シーケンス関連の制約に基づいて行をフィルタリングするにはどうすればよいですか?

  26. 26

    ANSI C:構造体フィールドを抽象化するにはどうすればよいですか?

  27. 27

    可変フィールドと不変フィールドの両方で構造体を初期化するにはどうすればよいですか?

  28. 28

    C ++ソースでThrift構造体のフィールドを適切に設定するにはどうすればよいですか?

  29. 29

    ヘッダーファイルで宣言された構造体変数を複数のソースファイルにインクルードするにはどうすればよいですか?

ホットタグ

アーカイブ