是否可以像普通函数那样引用扩展函数(参见here)?
我希望编译以下代码,但现在::String.toSomething
未知:
fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(::String.toSomething)
答案 0 :(得分:6)
你的意思是这样吗?
fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(String::toSomething)
请记住将::
始终放在函数
答案 1 :(得分:5)
在Kotlin中引用扩展方法可以通过在类名和方法名之间应用::
运算符来完成:
val function = Object::myExtensionMethod
所以在你的情况下:
fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(String::toSomething)
答案 2 :(得分:1)
OP将扩展功能定义为独立功能。如果将扩展功能视为另一个类的一部分,则该引用为不可能。至少Intellij告诉过我。
class MyClass {
// This function cannot be referenced.
fun Application.myExt() {
return "value"
}
}
作为解决方法,我做了这样的事情:
class MyClass {
fun getMyExtFunction: (Application.() -> Unit) {
return {
return "value"
}
}
}
现在我不再引用一个函数,而是从另一个方法返回这个函数。结果是一样的。