Groovy比较链

Groovy比较链,groovy,comparison,chain,Groovy,Comparison,Chain,在python中,以下语句返回正确的结果: >>> 1 == 1 == 1 True >>> 1 == 1 == 0 False 这样的构造(或类似的构造)在groovy中可能吗?以下操作失败: groovy:000> 1 == 1 == 1 ===> false 由于第一次比较的计算结果为true,true不等于1。这方面的任何解决方法?解决方法当然是使用AST转换:或者,如果不是您一直使用的AST路线: (1 == 1) &&

在python中,以下语句返回正确的结果:

>>> 1 == 1 == 1
True
>>> 1 == 1 == 0
False
这样的构造(或类似的构造)在groovy中可能吗?以下操作失败:

groovy:000> 1 == 1 == 1
===> false

由于第一次比较的计算结果为
true
true
不等于
1
。这方面的任何解决方法?

解决方法当然是使用AST转换:

或者,如果不是您一直使用的AST路线:

(1 == 1) && (1 == 1)
您可以通过以下方式编程实现:

public <T> Boolean allEqual(T... elements) {
    elements.toList().collate(2, 1, false).every { a, b -> a == b }
}

assert allEqual(1, 1, 1)
public Boolean allEqual(T…元素){
elements.toList().collate(2,1,false)。每隔{a,b->a==b}
}
断言allEqual(1,1,1)

这要看情况而定。如果可以注释(例如类),则局部变换将适用于您。如果你不能,它必须是一个全球性的。但总的来说,如果可能的话,我强烈建议使用局部转换。使用局部AST转换时,我总是需要注释类?您能指导我如何编写这样的注释吗?本地ast转换基本上由注释控制,因此您需要一些Java意义上的注释。我认为类、字段、方法、包或声明是可能的。至于如何做到这一点的细节,我认为stackoverflow不是一个合适的地方。我建议您在groovy用户列表中询问这个问题。我给出的链接是一个入口点,您必须稍微熟悉一下groovy AST