Drools:对变量使用相同的 DSL 定义两次会引发重复变量错误

Drools: using the same DSL definition twice with a variable throws a duplicate variable error

如果您用一些行定义一个 DSL 文件,并且其中一行使用一个变量,您不能在一条规则中使用它两次,因为您会得到一个重复的变量错误。

避免这种情况的最佳方法是什么?理想情况下,我想避免创建 DSL 行的两个副本来更改变量名称。

即 DSL 线路:

[when][]For all qualifications of type Higher=$highers: Higher()

这不能在同一规则中使用两次,否则我们会得到一个重复的 $highers 变量。

您可以像合成任何其他文本块一样合成绑定变量的名称:

[when][]there is a qualification of type {qualification}=
      ${qualification}: {qualification}()

但这会很棘手,因为您还必须引用此变量变量:

[then] print {qualification}=System.out.println( ${qualification} );

而不是直接的

[then] print qualification=System.out.println( $qualification );

一个潜在的危险是宏变量周围保留为 "landmark" 的文本数量减少,这可能会导致多个匹配项。