2012-02-16 18 views

回答

1

我不認爲有辦法讓這個與in工作。我能想到的最好的是寫一個自定義的方法,並運行,而不是像這樣:

boolean isIn(List domain, String target) { 
    domain.find { target ==~ it } 
} 

List myList = ["abc", "xyz", ~/a.+z/] 

assert (isIn(myList, "abc")) == true 
assert (isIn(myList, "xyz")) == true 
assert (isIn(myList, "abz")) == true 
assert (isIn(myList, "aby")) == false 

其實,這是可能的,但你需要可以編寫自己的List類:

class MyList extends ArrayList { 
    boolean isCase(Object o) { 
    find { o ==~ it } 
    } 
} 

def myList = new MyList() 
myList.addAll(["abc", "xyz", ~/a.+z/]) 

assert ("abc" in myList) == true 
assert ("xyz" in myList) == true 

assert ("abz" in myList) == true 
assert ("aby" in myList) == false 

或者,覆蓋對列表中的實例元類isCase方法:

def myList = ["abc", "xyz", ~/a.+z/] 
myList.metaClass.isCase = { o -> 
    (delegate.find { o ==~ it }) as boolean 
} 
// asserts as before 
+0

要不好。正如我所預料的那樣。不管怎麼說,還是要謝謝你。 – 2012-02-16 10:46:46

+0

@ T.Dabrowski對不起,我過早地否定;-) – 2012-02-16 10:48:57

+0

@ T.Dabrowski順便說一句,如果[epidemian的回答你剛纔的問題(http://stackoverflow.com/a/8927935/6509)是正確的,你可以做[接受它](http://meta.stackexchange.com/a/5235/156393) – 2012-02-16 10:55:31