Rego - 将数组分配给现有数组

Rego - assign array to existing array

我在 Rego 中遇到了一个奇怪的行为,我想知道为什么会这样。

Link 到 Rego 游乐场

当我创建一个空数组并为其分配新数组时,第一个数组的计数仍然为零:

package play

x[{"msg": msg}]{
    c := []
    a := [1,2]
    b := [3,4]
    c = array.concat(a,b)
    count(c) > 0
    msg := "Length of c is greater than zero"
}

输出为:

    {
    "x": []
}

那么,我有两个问题:

  1. 为什么我在行 count(c)> 0 中得到 false?

  2. 如何将数组分配给现有数组? (我需要它,因为我有 returns 数组的功能,我正在尝试 return 连接 2 个数组。例如:

    func[{"msg": msg}] = c{ 一个:= [1,2] b := [3,4] c = array.concat(a,b) }

谢谢!

Rego 值和变量是不可变的,因此无法为已经存在的变量分配新值。您的示例由于使用 unification 运算符 (=) 而不是赋值运算符 (:=) 而编译。

在您提供的示例中,只需删除第一个赋值:

package play

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"
}