В настоящее время я изучаю отличный, больше для удовольствия, чем для необходимости, но я столкнулся с чем-то, чего я не совсем понимаю.
Если я запустил следующее:
["SEMOLINA_0001"].collect {
def m = it =~ /SEMOLINA_([A-Fa-f0-9]+)/
println m
assert m
println m
return m.group(1)
}
Я получаю результат:
java.util.regex.Matcher[pattern=SEMOLINA_([A-Fa-f0-9]+) region=0,13 lastmatch=]
java.util.regex.Matcher[pattern=SEMOLINA_([A-Fa-f0-9]+) region=0,13 lastmatch=SEMOLINA_0001]
Result: [0001]
Если я удаляю assert
, я получаю исключение "Не найдено совпадений" при вызове .group(1)
.
Я могу обойти этоочевидно, но мне не нравится поведение языка, которого я не понимаю - я бы не подумал, что у assert
будут побочные эффекты, так что это ошибка или это намеренное поведение, которое я просто не уловил?
(Для чего бы это ни стоило, я использую Groovy 2.5.5 в приведенном выше примере.)
Я также только что заметил этот вопрос , который былзакрыто как обман, хотя я думаю, что ошибочно, так как проблема, которую пользователь казался больше похожей на эту, а не на какую-то связь с именованными группами как таковыми.