You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools决策表中insert关键字功能、作用域及后续使用咨询

关于Drools中insert($param)及相关用法的解析

核心功能

insert()是Drools规则引擎操作工作内存(Working Memory)的核心方法,作用是将对象注入到规则会话的数据源池中:

  • insert($param):直接把变量$param指向的对象插入工作内存。这里的$param一般是规则条件部分匹配到的对象,或是动作段里生成的临时对象。
  • insert(new Object($param)):先通过构造方法创建一个新的自定义对象(用$param作为初始化参数),再将这个新对象插入工作内存。

一旦对象被插入,规则引擎会立即重新扫描所有规则,匹配这个新对象触发的规则条件。

作用域

  • 插入的对象仅存活于**当前的KieSession(规则会话)**中,只要会话未销毁、对象未被retract()方法移除,就会被所有规则共享。
  • 规则动作段中插入的对象会立即触发规则引擎的重新评估流程,也就是新一轮的规则匹配周期。

后续规则条件中的使用方式

假设你在某条规则中插入了一个对象,后续规则可以直接在条件部分匹配该对象:

示例1:插入已有对象

rule "Insert Existing Object"
  when
    $customer: Customer(vipLevel == "VIP") // 匹配到VIP客户对象
  then
    insert($customer); // 将该客户对象插入工作内存
end

// 后续规则匹配这个插入的Customer对象
rule "Process VIP Customer"
  when
    $vipCustomer: Customer(vipLevel == "VIP", hasProcessed == false)
  then
    $vipCustomer.setHasProcessed(true);
    update($vipCustomer); // 更新对象,触发规则重新匹配
    System.out.println("已处理VIP客户");
end

示例2:插入新构造的对象

rule "Create and Insert Order"
  when
    $cart: Cart(totalPrice > 500) // 匹配购物车对象
  then
    // 用购物车总价构造新订单对象并插入
    insert(new Order($cart.getTotalPrice(), $cart.getUserId()));
end

// 后续规则匹配插入的Order对象
rule "Alert High-Value Order"
  when
    $highOrder: Order(totalAmount > 1000)
  then
    System.out.println("触发大额订单告警,金额:" + $highOrder.getTotalAmount());
end

文档参考方向

  • 重点查看Drools官方文档的「Working Memory Management」章节,里面详细说明了insert、retract、update等工作内存操作的细节。
  • 规则动作API参考部分会明确insert方法的参数要求、返回值以及触发的引擎行为。

内容的提问来源于stack exchange,提问作者Aakash Goyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:05:25