RuleUnit+Quarkus示例DRL文件中$l与$a变量的用法有何差异
变量属性说明
$l和$a都属于规则作用域下的局部变量,不是实例变量,仅在所属规则的对应作用范围内生效,无法跨规则共享,出了作用域就会自动失效。
二者的核心差异
1. 绑定逻辑与存储内容不同
$l是单实例匹配绑定:
它直接从/loanApplications数据源中筛选符合条件的单个LoanApplication实例,存储的是该实例的引用。每匹配到1条符合条件的记录,规则就触发1次,$l每次都对应当前匹配到的那一条申请数据,所以可以在then块中直接通过modify($l)修改实例的审批状态。$a是聚合遍历的临时绑定:
它仅在accumulate聚合函数内部生效,遍历/loanApplications下所有记录时,会把当前轮次的LoanApplication实例临时赋值给$a,仅用于提取amount字段参与求和计算,存储的是遍历过程中临时的单实例引用,出了accumulate块就无法访问,也不会在then块中被调用。
2. 触发逻辑不同
- 绑定
$l的NotAdultApplication规则触发次数等于符合「申请人年龄小于20」条件的贷款申请数量,每一条符合条件的申请都会触发一次规则执行。 - 用到
$a的AllAmounts规则仅会触发1次:等所有贷款申请遍历完成、求和算出总金额之后,才会执行一次then块的逻辑。
内容的提问来源于stack exchange,提问作者maxloo
相关产品推荐
相关产品推荐

