2017-04-11 4 views
1

私が知りたいのは、最初に変数をバインドしてから、それを同じパターンの式で使用することです。まずはバインディングを実行せずに式を実行してから、式がtrueに評価される場合はバインディングを行います。次のパターンまたはその部分。最初に変数をバインドし、それを同じパターンの式で使用するという利点がありますか?

たとえば、我々は次の3例があります。

rule "first doing binding and using that value for the expression" 
    when 
     Pattern1($var : var, $var > 10, $var < 20) 
    then 
     System.out.println($var); 
end 

rule "first doing binding and using the value from the original variable" 
    when 
     Pattern1($var : var, var > 10, var < 20) 
    then 
     System.out.println($var); 
end 

rule "first doing expression with using the value from the original variable and then doing the binding if the expression is evaluated to true" 
    when 
     Pattern1(var > 10, var < 20, $var : var) 
    then 
     System.out.println($var); 
end 

私に最後のケースは、最も理にかなっているが、私は意見を見てみたかったです。

また、変数がパターンの外側で必要でない場合は、バインディングを行うのは意味がありますか?

答えて

2

これは主に味の問題です。私の意見:

  • フィールド値が他に必要ない場合は、変数をバインドしないでください。 (客観的な議論:それは単にコードを混乱させ、他の場所で使用されているかどうか疑問に思う)
  • "標準"パターンに固執する。これは、あるフレーズで束縛と制約のいずれかである。または (!)フィールドを使用して、制約句(ない変数)
  • 1つのフィールド

上で複数の類似した制約のために単一の式を使用して、だから、私の好みの方法は次のようになります。

Pattern1($var: var, var > 10 && < 20) 
Pattern2($var: var > 10 && < 20) 

ノートTHA t#1では、バインディングと制約付きの制約をグループ化することができます。

+0

ありがとうございます。 –

関連する問題