2012-02-16 9 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

へ悪い考えた通り。とにかくありがとう。 –

+0

@ T.Dabrowski申し訳ありませんが、私は途方もなく負だった;-) –

+0

@ T.Dabrowski btw、[前の質問に対するepidemianの回答](http://stackoverflow.com/a/8927935/6509)が正しい場合は、 [それを受け入れる](http://meta.stackexchange.com/a/5235/156393) –