groovy 在使用 == 和 = 过程中遇到的坑

2018/7/31 源自  Groovy

因为 groovy 天生就是支持 java 的脚本语言,所以在 java 中需要进行扩展业务的时候,得心应手,我们团队的台柱子也是这么认为的,并且把 groovy 与 java 代码结合的天衣无缝。

但是世事难料,在经过长达半年之久的运行测试,终于发现一个隐藏的两个亿 bug ,我们来回顾一下 bug 的产生。

在 groovy 中,只要设置好上下文变量,groovy 运行,是直接以 extends 的方式运行的。
我们的表达式如下:

eventFilter: 'MetaID="evm_flow"&& L7P == "Oracle" && (regexFind(SrcIP,"^10.63.65.2") || regexFind(SrcIP,"^") ) && ( inRange(dst,"") || inRange(dst,"") )'

首先,MetaID 是一个字符串,并非是 boolean 值,但是在进行 == 和 = 的时候,奇迹发生了 MetaID = false,让我们创建一个 test.groovy 复现一下场景。

def MetaID = "A"
println (MetaID="B" && 1==2)
println MetaID

打印结果都是 false

原因还在进步一调查……