次のように、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
、現在のモジュール以外のモジュールからはアクセスできません。