Kotlin 如何在枚举内使用函数引用?

Kotlin 如何在枚举内使用函数引用?,kotlin,functional-programming,jvm,Kotlin,Functional Programming,Jvm,我有下一个枚举声明: enum class Foo(val f: (String) -> String) 下一个机构: BAR({obj -> obj.toString()}), FOO({obj -> obj.toString()}) ... 我可以定义函数以供参考吗?大概是这样的: private val predicate: (String) -> String = {obj -> obj.toString()} 下一个用法: FOO(::predic

我有下一个枚举声明:

enum class Foo(val f: (String) -> String)
下一个机构:

BAR({obj -> obj.toString()}),
FOO({obj -> obj.toString()})
...
我可以定义函数以供参考吗?大概是这样的:

private val predicate: (String) -> String = {obj -> obj.toString()}
下一个用法:

 FOO(::predicate)
此代码根本不编译(
Unresolved reference:谓词

更新:

我刚被创建为同伴对象:

 companion object Predicate {
    private fun predicate(): (String) -> String {
                return {obj -> obj.toString()}
            }
}
然后我的IDE建议我使用另一种类型
KFunction0 String>
。但是我可以在这里使用函数作为参数吗?

您的变量是lambda(就像函数的引用一样),默认情况下,您不需要传递其引用

private val谓词:(String)->String={obj->obj.toString()}
枚举类Foo(val f:(String)->String){
FOO(谓语),
条(谓词)
}
很好用。如果在类/对象中定义了函数,则必须传递它们各自的引用


PS:函数的引用生成lambda签名,而lambda已经有lambda签名

我无法重现这个问题,它对我来说很好。你有权进入私人物业吗?也许这就是问题所在@AnimeshSahu但是如果我在enum中需要这个函数呢?可能吗?@SlandShow伴生对象是在初始化枚举后设置的,目的是您可以在其中使用枚举。如下所示:如果将companion对象与函数一起使用,那么我需要将lambda的类型更改为
KFunction0 String>
@SlandShow为什么它甚至不会注册。KFunction0是一个lambda,它不接受任何参数,并在您的案例中返回一个值,就像:
()->(String)->String