0

我在 Rego 出现了一种奇怪的行为,我想知道为什么会这样。

链接到 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. 为什么我在行数(c)> 0 中得到错误?

  2. 如何将数组分配给现有数组?(我需要它,因为我有返回数组的函数,并且我正在尝试返回 2 个数组的串联。例如:

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

谢谢!

4

1 回答 1

0

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

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

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"
}
于 2021-08-29T17:54:02.943 回答