Kotlin:获得一个类的函数的参考“实例

我正在尝试传递一个函数到Kotlin中的函数,这里是我的代码。

fun validateValueWithFunc(value: String, parsefun: (CharSequence) -> Boolean, type: String){ if(parsefun(value)) print("Valid ${type}") else print("Invalid ${type}") } 

我传递的函数是从Regex类“containsMatchIn”

 val f = Regex.fromLiteral("some regex").containsMatchIn 

我知道::函数引用操作符,但我不知道如何在这种情况下使用它

在Kotlin 1.0.4中, 绑定的可调用引用 (左侧的表达式)尚不可用,只能在::的左边使用类名称 。

该功能计划在Kotlin 1.1中使用 ,并具有以下语法:

 val f = Regex.fromLiteral("some regex")::containsMatchIn 

在此之前,您可以使用lambda语法表达相同的内容。 要做到这一点,你应该捕获一个正则Regex到一个单参数的lambda函数中:

 val regex = Regex.fromLiteral("some regex") val f = { s: CharSequence -> regex.containsMatchIn(s) } // (CharSequence) -> Boolean 

使用with(...) { ... }的一行等价物:

 val f = with(Regex.fromLiteral("some regex")) { { s: CharSequence -> containsMatchIn(s) } } 

在这里,将Regex绑定到外部大括号的接收器 ,并返回外部大括号中的最后一个和唯一的表达式 – 也就是由内部大括号定义的lambda函数。 另见: with的习惯用法 。