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

Rego函数调用是否会被记忆化?单次查询内相同调用是否仅执行一次

Rego 单次查询执行的函数记忆化行为结论

你给出的示例代码中,规则foo和bar使用的val是myFunc单次调用返回的同一结果,该行为是Rego语义明确保证的。

核心机制说明

  • Rego 采用惰性求值 + 记忆化(memoization) 的求值模型,在单次查询的完整执行周期内,所有入参完全一致的函数调用、所有绑定完成的变量值都会被缓存,不会重复触发求值逻辑。
  • 示例中的val := myFunc(...)属于模块级变量绑定,该绑定只会在查询启动的初始化阶段执行一次myFunc调用完成赋值,后续所有位置对val的引用都会直接读取缓存的赋值结果,不会重复调用myFunc。

边界注意事项

即使你定义的myFunc是非幂等函数(相同入参可能返回不同结果),上述单次查询内的缓存行为依然生效。但记忆化缓存的生命周期仅绑定单次查询,不同查询请求之间不会共享缓存,每次新查询都会重新执行myFunc完成初始求值。

常见写法验证

就算不抽离val变量,直接把函数调用写在两个规则内部:

foo {
    myFunc(...).a
}

bar {
    myFunc(...).b
}

只要两处myFunc的入参完全一致,Rego依然只会执行一次myFunc调用,两个规则读取到的返回值还是同一份缓存结果,不会出现两次调用返回值不一致的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:15:27