私は店をimmutableとして扱うreduxストアを実装しています。したがって、店は次のようになります。dartのオプションの名前付きパラメータが指定されているかどうかを判別する方法はありますか?
class State {
final String firstname;
final String lastname;
State(this.firstname, this.lastname);
State.initial()
: this.firstname = null,
this.lastname = null;
State copy({String firstname, String lastname}) =>
new State(firstname ?? this.firstname, lastname ?? this.lastname);
}
これはすべて問題なく動作し、状態をコピーしてコピー内の個々のフィールドを置き換えることができます。
state.copy(firstname: "foo");
しかし、今ではフィールドをnullに戻すことはできません。
state.copy(firstname: null);
は機能しません。
私も何かしようとした:
State copy({String firstname = this.firstname, String lastname = this.lastname}) => ...
をしかしダートは、デフォルト値として非constのを許可していません。
これはDart 2.0(ObjectからStringへの割り当て)では無効です。 '__notSpecified__'のようなセンチネル文字列を使用することもできます – matanlurey
また、定数が正規化されているため、 'const Object()'は安全でないセンチネル値です。プログラム内の他の 'const Object()'は同じオブジェクトに評価されます。 – lrn
これまでのところ、私はこのソリューションを使いました。それは素晴らしく、定型的なオーバーヘッドはあまりありませんでした。私は実際には文字列パラメータではなく、オブジェクトに対して使用しています。文字列の場合、私は空に設定するために ""、存在しないにはnullに行きます。私は正規化についてはあまり確信していませんが、私はその意味合いを完全に理解するためにはそれ以上のことをしなければならないと思います。 – Fabian