首先绑定变量然后在相同模式的表达式中使用它是否有优势?

Is there an advantage of first binding a variable and than using it in an expression in the same pattern?

我想知道的是先绑定一个变量,然后以相同的模式在表达式中使用它,这比先执行表达式而不执行绑定,然后如果表达式的计算结果为真再执行绑定更好,这样我们就有了在下一个模式或 then 部分中可用的值。

例如下面三种情况:

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

对我来说,最后一个案例最有意义,但我想听听意见。

如果在模式之外不需要变量,那么进行绑定是否有意义?

这主要是个人喜好问题。我的意见:

  • 如果您不需要其他地方的字段值,请不要绑定变量。 (Objective 论点:它只会使代码混乱,让你怀疑它是否在其他地方使用。)
  • 坚持使用 "standard" 模式,即绑定和约束在一个短语中, 使用字段(不是变量)
  • 对一个字段的多个相似 (!) 约束使用单个表达式

所以我的首选方式是:

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

请注意,#1 允许您将绑定与绑定和约束与约束分组,这可能更具可读性。