例如,我尝试了带有查询的官方示例:
https://services.odata.org/TripPinRESTierService/(S(q1skedyvlv22yjp5fcce2gg2((/人$filter=用户名%20eq%27%russellwyte%27%20或%20UserName%20eq%20%27scottetchum%27%20和%20UserName:20eq%20%27ronaldmundy%27
和
https://services.odata.org/TripPinRESTierService/(S(q1skedyvlv22yjp5fcce2gg2((/人$filter=用户名%20eq%27%russellwyte%27%20和%20UserName%20eq%20%27scottetchum%27%20或%20UserName:20eq%20%27ronaldmundy%27
事实证明,它不是从左到右,AND运算符是在OR运算符之前处理的。我想知道这是否是规则。
我搜索了文档:http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752358
它指的是odata abnf。
但在abnf我只找到
"并且Expr=RWS";以及";RWS boolCommonExpr";
,我无法理解。。。
逻辑中的AND比OR有更高的优先级,就像乘法在数学中比加法有更高优先级一样。无论是在数学还是逻辑中,表达式都不是从左到右计算的。它们是根据特定的优先级规则进行评估的。
大多数(如果不是全部的话(编程语言都遵循逻辑优先级规则。