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" 的文本数量减少,这可能会导致多个匹配项。
如果您用一些行定义一个 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" 的文本数量减少,这可能会导致多个匹配项。