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

标签 kotlin functional-programming jvm

我有下一个枚举声明:

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/

相关文章:

spring-boot - 在 Spring 重新建立RPC连接

javascript:使用函数方法通过数组的多个值过滤对象

list - Haskell 求收敛序列的值

r - 使用 ggplot 进行函数式编程

xml - 我正在使用 Intellij IDEA。如何为 scala.xml 使用的 xerces stacktrace 提供 "view source"?

java - 强制隐式数组边界检查的最便宜方法

python - 如何在 Scala 中处理一个大列表?

android - 此错误的原因是什么以及如何解决?

kotlin - getInstance() Unresolved Kotlin

android - 将数据从 Viewmodel 设置为 Activity android kotlin