我正在尝试将函数传递给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
我知道:: function引用运算符,但我不知道如何在这种情况下使用它
答案 0 :(得分:5)
在Kotlin 1.0.4中,bound callable references(左侧有表情的那些)尚不可用,您只能use class name to the left of ::
。
此功能为planned for 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) } }
在这里,with
将Regex
绑定到receiver以获取外括号,并返回外括号中的最后一个和唯一的表达式 - 即lambda函数由内括号定义。另见:the idiomatic usage of with
。