当我喜欢这个时
println "line with 1 digit" =~ /\d+/
返回
java.util.regex.Matcher[pattern=\d+ region=0,17 lastmatch=]
但是当我将它转换为布尔值时 - 它会返回true
或false
,具体取决于它是否能够在字符串中找到模式
println ((boolean) "line with 1 digit" =~ /\d+/) // true
println ((boolean) "line with no digits" =~ /\d+/) // false
这是否意味着在转换为boolean
期间,它会隐式调用find
方法?
答案 0 :(得分:2)
它被称为" groovy truth" :一组将实例强制转换为布尔值的规则。
在幕后,Groovy在此对象上调用方法asBoolean()
。此方法可以在类上实现,也可以通过类别注入。看看各种" asBoolean" DefaultGroovyMethods中的方法或asBoolean(Matcher)的实施:
public static boolean asBoolean(Matcher matcher) {
RegexSupport.setLastMatcher(matcher);
return matcher.find();
}