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

Rego set comprehension不同场景下undefined返回结果差异咨询

Rego集合推导式在两种场景下的结果差异说明

两者结果不同的根本原因是Rego对不同作用域下的赋值、空结构返回的判定规则不一致,核心逻辑可以拆分为三点:

  • 首先明确集合推导式的基础求值逻辑:当推导式内部的条件没有任何可匹配的分支时(比如示例中foo["c"]不存在,没有值能满足元素生成条件),推导式本身会生成对应类型的空结构,set推导式对应的就是空集合set()。
  • 函数封装场景返回空集合的原因:自定义函数的规则体内部对局部变量的:=赋值采用容错绑定逻辑,只要表达式能生成合法类型的值(哪怕是空集合),就会正常完成变量绑定,最终将值作为函数返回值输出。示例中推导式生成的空集合会被正常绑定给rlt变量,因此函数最终返回空集合,不会向外传递undefined。
  • 顶层直接赋值返回undefined的原因:顶层作用域的全局:=赋值会额外做规则有效性校验:如果赋值右侧的推导式结果是空结构,Rego会判定这个规则没有产生有效绑定,整个赋值语句判定为求值失败,对应的变量不会绑定任何值,对外表现就是undefined。

你可以自行验证:将示例中的set推导式替换为数组推导式、对象推导式重复测试,会得到完全一致的表现:函数封装时返回对应类型的空结构,顶层直接赋值时返回undefined。如果给推导式增加一个必然成立的生成条件,让推导式产出非空结果,两个场景的返回值会完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:27:29