Groovy: использование оператора «in» для списка с регулярным выражением внутри - PullRequest
2 голосов
/ 16 февраля 2012

Можно ли использовать оператор "in" для списка с регулярным выражением внутри?

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

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

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

Спасибо за любую помощь.

1 Ответ

1 голос
/ 16 февраля 2012

Не думаю, что есть способ заставить это работать с 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:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...