Groovy比较链
在python中,以下语句返回正确的结果: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) &&
>>> 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