Lambda变量与函数引用

时间:2018-02-19 13:42:07

标签: kotlin

将lambda存储在变量中并重用它,与使用函数引用相比有什么区别?

例如一个简单的过滤器:

val strings = listOf("One", null, "Three")

val noNulls: (String?) -> Boolean = { value -> value != null }
strings.filter(noNulls)

VS

fun noNulls(value: String?): Boolean = value != null
strings.filter(::noNulls)

1 个答案:

答案 0 :(得分:2)

在这两种情况下,这将作为专用类为JVM编译,该类实现传递给filter的对象的行为。

如果您的意图是在声明的范围内调用它们,您应该使用嵌套函数声明;如果你的目的是获得一个函数对象,那么使用专门针对它的特性:lambda表达式。