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

Rego数组赋值后长度为0原因及正确数组赋值方法问询

问题1:为什么count(c) > 0判断结果为false

Rego是声明式的逻辑编程语言,所有变量均为不可变的单次绑定:

  • 你代码中首先用c := []将变量c绑定为了空数组,这个绑定一旦生效就无法修改
  • 后续的c = array.concat(a,b)不是赋值操作,而是相等约束:要求已经绑定为空数组的c必须等于array.concat(a,b)返回的[1,2,3,4]
  • 这个约束显然不成立,因此整个规则体的逻辑判定为假,规则x无返回结果,最终输出空数组。此时c的值始终是空数组,所以count(c) > 0结果为false。

问题2:如何实现数组拼接的需求

Rego没有「修改已有变量值」的概念,不需要预先初始化空数组再赋值,直接将拼接结果绑定到变量即可。

你场景的正确写法如下:

package play

func[{"msg": msg}] = c {
    a := [1,2]
    b := [3,4]
    # 直接绑定c为拼接结果,无需提前初始化
    c := array.concat(a, b)
    msg := "拼接完成"
}

# 对应你最初的x规则正确写法:
x[{"msg": msg}] {
    a := [1,2]
    b := [3,4]
    c := array.concat(a, b)
    count(c) > 0
    msg := "Length of c is greater than zero"
}

执行后的输出结果为:

{
    "func": [
        {
            "msg": "拼接完成"
        }
    ],
    "x": [
        {
            "msg": "Length of c is greater than zero"
        }
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:04