OPA Rego 函数语句求值顺序
OPA Rego function statement evaluation order
package play
exists(obj, a) {
obj[a]
}
hello {
exists(input, "department")
contains(input["location"], "London")
}
world {
contains(input["location"], "London")
exists(input, "department")
}
input = {
"department": "Eng",
"location": "London" }
以上代码仅匹配 hello。为什么 world 即使条件相同但顺序颠倒也不匹配?
语句的顺序无关紧要。您实际上找到了 a bug!
如果你稍微改变这个例子,这样 exists
就不会以 input
作为第一个参数来调用,而是像 exists(input.user, "department")
这样的东西,然后你更新输入文档以反映这一点:
{"user": {"department": "Eng", "location": "London"}}
您将观察到正确的行为(例如,world { contains(input.user["location"], "London"); exists(input.user, "department") }
)。
package play
exists(obj, a) {
obj[a]
}
hello {
exists(input, "department")
contains(input["location"], "London")
}
world {
contains(input["location"], "London")
exists(input, "department")
}
input = { "department": "Eng", "location": "London" }
以上代码仅匹配 hello。为什么 world 即使条件相同但顺序颠倒也不匹配?
语句的顺序无关紧要。您实际上找到了 a bug!
如果你稍微改变这个例子,这样 exists
就不会以 input
作为第一个参数来调用,而是像 exists(input.user, "department")
这样的东西,然后你更新输入文档以反映这一点:
{"user": {"department": "Eng", "location": "London"}}
您将观察到正确的行为(例如,world { contains(input.user["location"], "London"); exists(input.user, "department") }
)。