Groovy「in」運算符在不同情況下似乎意味着不同的事情。有時x in y
表示y.contains(x)
,有時它似乎稱爲y.isCase(x)
。運營商中的Groovy如何工作?
Groovy如何知道要調用哪一個? Groovy知道哪些使用.contains方法的特定類或一組類?還是由一個對象上的方法的存在引發的行爲?是否有任何情況下運營商變成了其他東西?
Groovy「in」運算符在不同情況下似乎意味着不同的事情。有時x in y
表示y.contains(x)
,有時它似乎稱爲y.isCase(x)
。運營商中的Groovy如何工作?
Groovy如何知道要調用哪一個? Groovy知道哪些使用.contains方法的特定類或一組類?還是由一個對象上的方法的存在引發的行爲?是否有任何情況下運營商變成了其他東西?
我做了一些實驗和它看起來像in
運營商僅基於這表現在下面的代碼
class MyList extends ArrayList {
boolean isCase(Object val) {
return val == 66
}
}
def myList = new MyList()
myList << 55
55 in myList // Returns false but myList.contains(55) returns true
66 in myList // Returns true but myList.contains(66) returns false
對於JDK集合類我想這只是好像in
運算符是isCase
方法基於,因爲isCase()
對這些類別調用。
它實際上都基於isCase。 Groovy增加了一個基於contains方法的isCase method to Collections。任何具有isCase的類都可以與in一起使用。
好的,這是有道理的。我對「in」和isCase之間的關係感到困惑。我可以看到,現在包含使用容器作爲案例標籤時有意義。對in運算符重用isCase有點令人驚訝,因爲它允許在String == true中出現意外的表達式,如'asdf'。 – ataylor 2010-01-15 00:05:37
這是正確的,但在常規方面我很差。雖然case語句的行爲幷包含一個元素對集合使用相同的邏輯,但在其他情況下它們是非常不同的。例如,下面的斷言不傳遞:在'buns'中聲明'b'。這至少可以說是違反直覺的。 – 2011-04-20 13:41:54
任何人都可以請總之告訴我什麼是案件的意思? – 2014-11-04 12:52:49