Что этот код делает в Groovy? - PullRequest
3 голосов
/ 05 марта 2011
def host = /\/\/([a-zA-Z0-9-]+(\.[a-zA-Z0-9-])*?)(:|\/)/
assertHost 'http://a.b.c.d:8080/bla', host, 'a.b.c.d'
def assertHost (candidate, regex, expected){
    candidate.eachMatch(regex){assert it[1] == expected}
}

Я знаю, что приведенный выше код подтверждает мои данные!Но в строке 4 внутри замыкания магическая переменная (it) представляется в массиве!Я немного запутался в этом.Как это работает?

Как это работает в Groovy (проиллюстрируем простым кодом)?

1 Ответ

1 голос
/ 05 марта 2011

С http://groovy.codehaus.org/groovy-jdk/java/lang/String.html:

replaceAll

public String replaceAll(String regex, Closure closure)

Replaces all occurrences of a captured group by the result of a closure on that text.
For examples,

assert "hellO wOrld" == "hello world".replaceAll("(o)") { it[0].toUpperCase() }

assert "FOOBAR-FOOBAR-" == "foobar-FooBar-".replaceAll("(([fF][oO]{2})[bB]ar)", { Object[] it -> it[0].toUpperCase() })


Here,
     it[0] is the global string of the matched group
     it[1] is the first string in the matched group
     it[2] is the second string in the matched group
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...