我如何在枚举中使用函数引用?
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签名
我有下一个枚举声明:
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签名