gyp*_*ve5 15 lambda anonymous-function kotlin
Kotlin有两种声明匿名函数的方法(也就是lambda).两种不同的语法是:
val lambda = { input : String ->
"received ${string}"
}
Run Code Online (Sandbox Code Playgroud)
和
val anonymousFunction = fun (input : String): String {
return "received ${string}"
}
Run Code Online (Sandbox Code Playgroud)
我理解两者之间的区别(如本答案中所述),但我不明白的是为什么语言有两种不同的方式来声明同一件事.
对于另一个经验,是否在工作中有优化?匿名函数版本是否过于冗长?lambda版本的语法不支持返回类型吗?
yol*_*ole 19
关键原因是支持lambdas的回报.返回规则是return关键字从使用fun关键字声明的最近函数返回.在某些情况下,您希望return在封闭函数中返回一个代码块,因此您使用lambda:
fun processElements(list: List<Element>): Boolean {
list.forEach { element ->
if (!element.process()) return false // returns from processElements()
}
return true
}
Run Code Online (Sandbox Code Playgroud)
在其他情况下,您希望从块返回,而不是从封闭函数返回.使用lambda时,从块返回需要return@label语法,这有点笨重:
fun processElements(list: List<Element>) {
list.forEach { element ->
if (!needToProcessElement(element)) return@forEach // returns from block
element.process()
}
}
Run Code Online (Sandbox Code Playgroud)
为了避免笨拙,我们提供了另一种语法 - 匿名函数 - 它允许您return直接使用从块返回:
fun processElements(list: List<Element>) {
list.forEach(fun(element) {
if (!needToProcessElement(element)) return // returns from block
element.process()
})
}
Run Code Online (Sandbox Code Playgroud)
第二个原因是将返回类型声明放入lambda的语法中确实是不可能的,但这在实践中很少需要,所以它并不是特别重要.
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |