我有下一个枚举声明:
enum class Foo(val f: (String) -> String)
下一个 body :
BAR({obj -> obj.toString()}),
FOO({obj -> obj.toString()})
...
我可以以某种方式定义功能以供引用吗?像这样的东西:
private val predicate: (String) -> String = {obj -> obj.toString()}
下一个用法:
FOO(::predicate)
此代码根本无法编译(
Unresolved reference: predicate
)。更新:
我刚刚创建了伴随对象:
companion object Predicate {
private fun predicate(): (String) -> String {
return {obj -> obj.toString()}
}
}
然后我的 IDE 建议我使用另一种类型
KFunction0<(String) -> String>
.但是我可以在这里使用函数作为参数吗?
最佳答案
默认情况下,您的变量是一个 lambda(就像函数的引用),您不需要传递它的引用。
private val predicate: (String) -> String = {obj -> obj.toString()}
enum class Foo(val f: (String) -> String) {
FOO(predicate),
BAR(predicate)
}
工作得很好。如果您在类/对象中定义了函数,则必须传递它们各自的引用。
PS:函数的引用会生成 lambda 签名,而 lambda 已经有 lambda 签名
关于kotlin - 我如何在枚举中使用函数引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61744304/