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