型のコンストラクタ構文を無効にすることはできますか? 質問する

型のコンストラクタ構文を無効にすることはできますか? 質問する

次のように、Rust ライブラリで独自の型を定義するとします。

struct Date {
    year: u16,
    month: u8,
    day: u8
}

impl Date {
    fn new(y: u16, m: u8, d: u8) -> Date {
        // Do some validation here first
        Date { year: y, month: m, day: d }
    }
}

方法はあるか必要とするユーザーがDate::newコンストラクターを使用できないようにするにはどうすればよいでしょうか。言い換えれば、Date次のコンストラクターを使用してユーザーが独自の構造体を作成することを何らかの方法で禁止することはできますか。

let d = Date { 2017, 7, 10 };

私が質問する理由は、構造体のメンバーを設定する前に、開発者に引数を一連の検証に通すことを強制できないのは、有害な欠陥であるように思われるからです。(ただし、Rust では、データの作成時ではなく使用時に検証するなど、使用すべき他のパターンがあるかもしれません。その点については、遠慮なくコメントしてください。)

ベストアンサー1

TL;DR: 「デフォルト コンストラクター」は、デフォルトでは既に無効になっています。

構文structは、アクセス権を持つユーザーのみが使用できます。全ての分野struct

その結果、プライバシー ルールに従って、すべてのフィールドがマークされていない限り、同じモジュール内でのみアクセス可能になります。マークされているpub場合は、どこからでもアクセスできますstruct

同じことが機能newはここでマークされていないためpub、現在のモジュール以外のモジュールからはアクセスできません。

おすすめ記事