我如何在枚举中使用函数引用?

How can i use function reference inside enum?

我有下一个枚举声明:

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: 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)
}

工作正常。如果您在 class/objects 中定义了函数,则必须传递它们各自的引用。

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