运营商中的Groovy似乎并没有打电话给isCase

时间:2016-06-25 11:57:10

标签: groovy operator-overloading

根据我的阅读,Groovy in运算符调用isCase。但是,我最近遇到了一些问题,它是这样的:

class Test {}

new Test() in Test

返回true。但当我把它切换为:

class Test {}

new Test().isCase(Test)

返回false。我完全不理解这背后的原因和原因,我有点害怕in运算符是硬编码的。

1 个答案:

答案 0 :(得分:2)

in是一个成员资格运算符,相当于调用isCase()方法。所以根据groovy doc:

  

成员资格运营商(in)相当于调用isCase   方法。在List的上下文中,它等同于调用   contains,如下例所示:

     

def list = ['Grace','Rob','Emmy'] assert ('Emmy' in list)

     

相当于调用list.contains('Emmy')list.isCase('Emmy')

所以在你的情况下,它将是:

Test t = new Test()

println t in Test
println Test.isCase(t)

在两种情况下都会打印出来。当你在错误的对象上调用方法时,你会变得虚假:t.isCase(Test)