绑定函数、属性引用

你可以指向一个特定对象的方法实例。

val numberRegex = "\\d+".toRegex()
println(numberRegex.matches("29")) // prints "true"
val isNumber = numberRegex::matches
println(isNumber("29")) // prints "true"

与直接调用matches方法不同,我们将其存在一个引用中。这个引用就被绑定在它的接收器上。这样的话引用就可以像上面的例子那样直接调用或在函数类型表达式作为参数的时候进行调用:

val strings = listOf("abc", "124", "a70")
println(strings.filter(numberRegex::matches)) // prints "[124]"

对比绑定的类型和对应的未绑定的引用。绑定的可调用的引用有它的接收器,因此接收器的类型就不在是一个参数:

val isNumber: (CharSequence) -> Boolean = numberRegex::matches
val matches: (Regex, CharSequence) -> Boolean = Regex::matches

属性引用也可以被绑定:

val prop = "abc"::length
println(prop.get()) // prints "3"

results matching ""

    No results matching ""