Порядок оценки оператора функции OPA Rego
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" }
Приведенный выше код соответствует только приветствию. Почему мир не совпадает даже при тех же условиях, но обратный порядок?
1 ответ
Решение
Порядок заявлений не имеет значения. Вы действительно нашли ошибку!
Если вы немного измените пример, чтобы exists
не называется с input
в качестве первого аргумента, но вместо этого что-то вроде exists(input.user, "department")
а затем вы обновляете входной документ, чтобы отразить это:
{"user": {"department": "Eng", "location": "London"}}
Вы заметите правильное поведение (например, world { contains(input.user["location"], "London"); exists(input.user, "department") }
).