我正在研究Kotlin,在理解带括号的滤镜和花括号之间的区别时遇到了一些困难。如果我检查过滤器的实现,Intellij会将我重定向到相同的源。
代码示例:
listOf("john", "dave").filter { name -> name.startsWith("j") }
// versus
// simple predicate function
fun getSimplePredicate(): (String) -> Boolean =
name: String -> name.firstName.startsWith(prefix)
// actual filter call
listOf("john", "dave).filter(getSimplePredicate())
如果我想打电话给filter { getSimplePredicate() }
怎么办?
有办法吗?有什么区别?在此先感谢
.filter { ... }
与]相同>
.filter({ ... })
因此,在您的代码中,
{ name -> name.startsWith("j") }
是一个lambda,它是传递给filter()
的参数。
函数getSimplePredicate()
返回
谓词函数。因此
如果.filter(getSimplePredicate())
等效于.filter({ name.firstName.startsWith(prefix) })
,等效于.filter { name.firstName.startsWith(prefix) }
。.filter { getSimplePredicate() }
是一个返回布尔值的函数,即{ getSimplePredicate() }
返回一个布尔值,则getSimplePredicate()
将是有效的。但这不是,因此无效。