Порядок оценки оператора функции 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") }).

Другие вопросы по тегам