2019年9月20日金曜日

循環参照によるSTACK OVERFLOW対策

ずっと、いつか対策しようと思っていて手付かずだった問題の一つにDay集合の循環参照問題があります。

Day集合は、下のように、定義したDay集合をさらに、別なDay集合の要素として定義できるようにしています。これを繰り返すことで任意のDay集合が定義できる筈です。(証明は出来ていません。)

C#は、便利な集合演算が行えるので、実装は楽です。クリックすると該当のDay集合を表示するようにしているのは、中々便利な機能です。(制約の開発には、嬉しい機能です。)

問題は、例えば、上のように日祝の定義が二つあり、さらにそれを参照していると循環参照となります。プログラム上は、再帰呼び出しによる無限ループでスタックオーバフローとなる古典的な問題です。
循環参照の検出をどうしようか?と少し悩みましたが、単純な解決策が見つかりました。呼び出し回数を引き数にして、一定回数以上の呼び出しで循環参照を検出します。多分、これで副作用なくWarningが可能となる筈です。

0 件のコメント:

コメントを投稿