0

私のjavapojoXOMモデルには、countという静的変数があります。5つのルールを実行していて、count変数を1つ増やしています。したがって、実行の最後に、count=5としての値があります。

ここで、非静的変数カウントを宣言し、ルールの実行ごとにその値をインクリメントすると、変数は5回初期化され、非静的になります。

つまり、オブジェクトが静的として宣言されていない場合、Java XOMモデルクラスの5つのインスタンスが作成されますか?

4

2 に答える 2

0

私はあなたの質問を理解したかどうかわかりません。 「次に、myObj.countをmyObj.count+1に設定します。」
というルールがあります。
次に、myObjオブジェクトと同じ数のカウント変数があります。
したがって、作業メモリーに1つのmyObjを挿入すると、最後と実行中に1つのmyObjしかありません。
各ルールは、作業メモリーに「一致」している回数だけ実行されます。
したがって、エンジンで5 myObjを渡すと、それぞれ5つのmyObj.countが最終値「5」になります。

staticを使用している場合は、同じになります。
エンジンをステートフルモードで使用している場合を除きます(実際には非常にまれです)。
BRMSは意思決定サービスが存在するため、渡されたパラメーター(およびもちろんルール)について決定を下します。
ステートフルモードで使用できないと言っているわけではありませんが、この使用はまれです。
そうすれば、はい、前の答えは正しく、無限に増加する値になります。実行ごとに5ずつ増加します。

ところで:実行されたかどうかのルールの数や実行時間などを取得するための属性のセット全体があるため、これを試したことはありません...

要約すると、作業メモリーにあるものがあります。つまり、オブジェクトのインスタンスが1つある場合、エンジンは実行時にそれ以上インスタンスを作成することはありません。これは、RETEPlusアルゴリズムによる狂気(::)につながります。(これも頻繁には使用されません)
オブジェクトのインスタンスをさらに作成する唯一の方法は、ルールを介して直接実行時に自分で作成することです。例:レポートのメッセージに「helloworld」というメッセージを追加します。お
役に立てば幸いです。

于 2012-04-18T12:15:36.360 に答える
0

静的変数は単なるクラス変数です。したがって、ルールの呼び出し全体で「永続化」します。つまり、次に実行するときのカウントは10になります。静的を使用していない場合は、ルールごとに1回ではなく、ルール呼び出しごとに1回初期化されます。だから、要するに、いいえ。

于 2012-04-06T01:52:24.773 に答える