Memory Match(记忆匹配)
询问候选者是否匹配已记住的任何东西,并按答案分支。
用途
拿一个候选者与命名记忆里每条存活条目比对。任一条目满足条件,节点路由 matched;否则 notMatched。
条件是完整表达式,所以匹配可用容差、范围和字符串操作——不只是相等。
何时用
- 冷却守卫:"最近处理过这个目标吗?"
- 去重:"这条目已在已处理清单里了吗?"
- 邻近检查:"有已记条目靠近这个位置吗?"
何时不用
- 读一个已知的键——那是查找,不是匹配。
- 比较两个变量——用 If。
- 在任何东西被记住之前——记忆是空的,每个候选都路由
notMatched。
前提
一个记忆名 称和一个条件表达式。记忆必须由 Runtime Memory 节点写入。
如何运行
过期条目不被考虑——你写入时设的 TTL 正是让守卫自清理的东西。
设置
| 设置 | 类型 | 范围 | 备注 |
|---|---|---|---|
| Memory | string | 1–100 字符 | 必填。 要搜的仓库 |
| Expression | string | ≤ 1000 字符 | 条件,引用 {{item.<字段>}} |
| Conditions | 列表 | 1–50 行 | 旧的无代码构建器 |
| Logic | 选择 | and / or | 旧行如何组合 |
引用受测条目
表达式里,被测条目暴露为 item:
{{item.x_coordinate}}
{{item.status}}
你的候选值来自普通流程变量。
容差匹配——本节点存在的理由
对真实屏幕数据,精确相等几乎无用。表达式引擎让你表达接近:
(abs({{current_x}} - {{item.x_coordinate}}) <= 1) && (abs({{current_y}} - {{item.y_coordinate}}) <= 1)
读作:"有已记条目在我现在位置一格之内吗?"
正是它让这个模式在 OCR 读坐标漂一像素、或目标上报位置在帧间轻微移动时仍然可用。
没有作用域设置
Memory Match 跨作用域读取——它不接受作用域参数。旧节点可能携带 scope 字段;它被容忍并忽略。
仔细核对记忆名称
既然本节点没有作用域选择器,记忆名称就是它与你写入的纽带。打错就意味着空记忆和永久的 notMatched。
端口
| 端口 | 走它的时机 | 必接 |
|---|---|---|
| matched | 有存活条目满足条件 | 否——宽容 |
| notMatched | 无条目满足 | 否——宽容 |
| Fatal | 配置无效 | 否——永不被走 |
两个分支都可选。留一个不接会优雅结束该路径——一种合法的"到此为止"选择——但通常你两个都想接。
基础示例
这条目处理过了吗?
- Memory:
processed_items - Expression:
{{item.id}} == {{current_id}}
matched → 跳过;notMatched → 处理它。