【问题标题】:Rego - assign array to existing arrayRego - 将数组分配给现有数组
【发布时间】:2021-10-25 01:04:40
【问题描述】:

我在 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. 为什么我的行数(c)> 0 为假?

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

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

谢谢!

【问题讨论】:

    标签: policy open-policy-agent rego


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多