次の例では、フィールドの宣言で構造体の各フィールドに値を代入する方が好きです。あるいは、フィールドに値を割り当てるために、フィールドごとに1つの追加ステートメントを効果的に取ります。私ができるようにしたいのは、構造体がインスタンス化されたときにデフォルト値を割り当てることだけです。Rust構造体の変数を初期化する高速/短期の方法はありますか?
もっと簡潔な方法がありますか?
struct cParams {
iInsertMax: i64,
iUpdateMax: i64,
iDeleteMax: i64,
iInstanceMax: i64,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}
impl cParams {
fn new() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
おかげで、私は、迅速な読み取りがあったが、私はより良い理解するために再読みます。いくつかの言語が使用する "自然な"デフォルトは、私がゼロ、偽、 ""などと信じているように私に合っています。解決すべき私の小さな「問題」よりも広い意味があることを理解しています。例えば、 "iVal:i64 = 0"、私のより広いニーズを解決するだろうが、それは起こることはないと思う。 "#[deriving(Default)]"は私の望みのほとんどを解決するはずです。なぜ私はテストプログラムで-1を使用したのか分かりませんが、それは必要ありません(歴史的)。フィールドが定義されているインサイチュで値を割り当てることができるのは非常に便利です(IMHO)。 –
@BrianOh、接頭辞として、 "構造体フィールドのデフォルト値"(つまり 'struct Foo {val:i64 = 0}'のようなもの)が提案されています。 – huon
それがIMOの実装されていれば良いでしょう - "struct foo {...."私は、私の質問と既定値で書かれた構造体を使用して、あなたの提案に変更を加えました。それは確かに私に良く合い、はるかに簡潔です。構文に慣れていないので、私が持っていた小さな問題の1つは、すべてのデフォルトの構文を知らないことでした。 IE: "= cParams {iInsertMax:10、.. Default :: default()};"を使用しましたが、実際には "iInstanceMax"をデフォルトにします。 IMOの場合、#[deriving(Default)]が構造体の一部であることが望ましいでしょうが、コンパイラの方が良いと思います。 –