将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)
答案 0 :(得分:2)
在这两种情况下,这将作为专用类为JVM编译,该类实现传递给filter
的对象的行为。
如果您的意图是在声明的范围内调用它们,您应该使用嵌套函数声明;如果你的目的是获得一个函数对象,那么使用专门针对它的特性:lambda表达式。