I mean using `!or` to represent `not (xxx or xxx)`, and so do `!and`.

YuanSheng Wang <membp...@apache.org> 于2020年11月26日周四 下午2:15写道:

> one question, do we support the operator `!or`, `!and` ?
>
> it is not easy to understand for me :(
>
> On Thu, Nov 26, 2020 at 12:28 PM Zexuan Luo <spacewan...@apache.org>
> wrote:
>
> > Personally speaking, I think the SO way is more readable. Because the
> > logical operator is the same level with the conditions, therefore we can
> > know the conditions and the operator are in the same expression.
> >
> > Chao Zhang <zchao1...@gmail.com> 于2020年11月25日周三 下午5:36写道:
> >
> > > The expression in Stack Overflow is good, but the readability is not
> > > satifactory,
> > > what about modifying it to make it more hierarchical? For example,
> > > promoting the level of
> > > logical operators.
> > >
> > > Chao Zhang
> > > https://github.com/tokers
> > >
> > > On November 25, 2020 at 4:04:29 PM, YuanSheng Wang (
> membp...@apache.org)
> > > wrote:
> > >
> > > I got this idea from Stack Overfollow[1]
> > >
> > > [1]
> > >
> > >
> >
> https://stackoverflow.com/questions/20737045/representing-logic-as-data-in-json
> > >
> > >
> > > On Wed, Nov 25, 2020 at 4:02 PM YuanSheng Wang <membp...@apache.org>
> > > wrote:
> > >
> > > > I think we can mainly use `array`, I write a new style.
> > > >
> > > > this style can be compatible with the old rules.
> > > >
> > > > [
> > > > "AND", -- optional
> > > > ["arg_name","==","yaml"],
> > > > [
> > > > "OR",
> > > > ["arg_name","==","json"],
> > > > ["arg_weight",">",10]
> > > > ]
> > > > ]
> > > >
> > > >
> > > >
> > > > On Wed, Nov 25, 2020 at 2:58 PM Zexuan Luo <spacewan...@apache.org>
> > > wrote:
> > > >
> > > >> Currently we support a DSL to match routes with variables:
> > > >>
> > > >> ```
> > > >> [
> > > >> ["arg_name","==","json"],
> > > >> ["arg_weight",">",10],
> > > >> ["arg_weight","!",">",15]
> > > >> ]
> > > >> ```
> > > >>
> > > >> is evaluated to `ngx.var.arg_name == "json" and ngx.var.arg_weight >
> > 10
> > > >> and not ngx.var.arg_weight > 15`.
> > > >>
> > > >> It would be better if the DSL can support `or` relation and nested
> > > >> expressions.
> > > >>
> > > >> What about a syntax like:
> > > >> ```
> > > >> {
> > > >> "or": [ <- the `or` can be other logical operators, like `and`,
> > > >> `!or`, `!and`
> > > >> ["arg_name","==","json"],
> > > >> ["arg_weight",">",10],
> > > >> ["arg_weight","!",">",15]
> > > >> ]
> > > >> }
> > > >> ```
> > > >> (means `ngx.var.arg_name == "json" or ngx.var.arg_weight > 10 or not
> > > >> ngx.var.arg_weight > 15` )
> > > >> and
> > > >> ```
> > > >> {
> > > >> "!and": {
> > > >> "and": [
> > > >> ["arg_name","==","yaml"]
> > > >> ],
> > > >> "or": [
> > > >> ["arg_name","==","json"],
> > > >> ["arg_weight",">",10],
> > > >> ["arg_weight","!",">",15]
> > > >> ]
> > > >> }
> > > >> }
> > > >> ```
> > > >> (means `not (ngx.var.arg_name == "yaml" and (ngx.var.arg_name ==
> > "json"
> > > or
> > > >> ngx.var.arg_weight > 10 or not ngx.var.arg_weight > 15))` )
> > > >>
> > > >
> > > >
> > > > --
> > > >
> > > > *MembPhis*
> > > > My GitHub: https://github.com/membphis
> > > > Apache APISIX: https://github.com/apache/apisix
> > > >
> > >
> > >
> > > --
> > >
> > > *MembPhis*
> > > My GitHub: https://github.com/membphis
> > > Apache APISIX: https://github.com/apache/apisix
> > >
> >
>
>
> --
>
> *MembPhis*
> My GitHub: https://github.com/membphis
> Apache APISIX: https://github.com/apache/apisix
>

Reply via email to