我是科特林新手。我总是使用带花括号的地图变换。然后 -
为什么这有效 ->
val x = someList.map(::SomeConstructor)
Run Code Online (Sandbox Code Playgroud)
这不是吗?
val x = someList.map{ ::SomeConstructor }
Run Code Online (Sandbox Code Playgroud)
我在在线教程的任何地方都没有找到带圆括号的地图的用法。
请尽量详细解释一下,或者提供合适的参考文章。
您所问的问题在这个官方文档中有解释。
当且仅当函数的最后一个参数是 lambda 时,您可以从调用括号中提取它,将其内联到函数的右侧。它允许更好的 DSL 语法。
编辑:让我们举个例子:
良好的用例之一是上下文编程。想象一下你有一个可关闭的物体。您想要限制其使用,以确保在不再需要时正确关闭它。在 Java 中,你有 try-with-resources:
try (final AutoCloseable myResource = aquireStuff()) {
// use your resource here.
}
Run Code Online (Sandbox Code Playgroud)
Kotlin 提供了该use功能。现在,您可以执行以下任一操作:
acquireStuff().use( { doStuff1(it) ; doStuff2(it) } )
Run Code Online (Sandbox Code Playgroud)
或写:
acquireStuff().use {
doStuff1(it)
doStuff2(it)
}
Run Code Online (Sandbox Code Playgroud)
它看起来像 Java try-w-resource,但可以扩展到您的任何 API。允许您设计为最终用户提供高级构造的库。
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |