OPA Re go Порядок оценки оператора функции - PullRequest
0 голосов
/ 10 февраля 2020
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"}

Вышеуказанный код соответствует только привет . Почему world не совпадает даже при одинаковых условиях, но порядок обратный?

1 Ответ

2 голосов
/ 10 февраля 2020

Порядок утверждений не имеет значения. Вы действительно нашли ошибку !

Если вы слегка измените пример, чтобы exists не вызывался с input в качестве первого аргумента, а вместо этого что-то вроде exists(input.user, "department") и затем вы обновите входной документ, чтобы отразить это:

{"user": {"department": "Eng", "location": "London"}}

Вы увидите правильное поведение (например, world { contains(input.user["location"], "London"); exists(input.user, "department") }).

...