当转换为布尔值时,groovy是否隐式调用Matcher上的find?

时间:2016-02-20 21:37:21

标签: groovy

当我喜欢这个时

println "line with 1 digit" =~ /\d+/

返回

java.util.regex.Matcher[pattern=\d+ region=0,17 lastmatch=]

但是当我将它转换为布尔值时 - 它会返回truefalse,具体取决于它是否能够在字符串中找到模式

println ((boolean) "line with 1 digit" =~ /\d+/) // true
println ((boolean) "line with no digits" =~ /\d+/) // false

这是否意味着在转换为boolean期间,它会隐式调用find方法?

1 个答案:

答案 0 :(得分:2)

它被称为" groovy truth" :一组将实例强制转换为布尔值的规则。

在幕后,Groovy在此对象上调用方法asBoolean()。此方法可以在类上实现,也可以通过类别注入。看看各种" asBoolean" DefaultGroovyMethods中的方法或asBoolean(Matcher)的实施:

public static boolean asBoolean(Matcher matcher) {
    RegexSupport.setLastMatcher(matcher);
    return matcher.find();
}