Kotlin:使用地图变换时 {} 和 () 之间的区别?

2024-05-02

我是科特林新手。我总是使用带花括号的地图变换。然后 -

为什么这有效 ->

val x = someList.map(::SomeConstructor)

这不是吗?

val x = someList.map{ ::SomeConstructor }

我在在线教程的任何地方都没有找到带圆括号的地图的用法。

请尽量详细解释一下,或者提供合适的参考文章。


你问的问题已得到解释在这个官方文档中 https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter.

If 并且仅当函数的最后一个参数是 lambda,您可以从调用括号中提取它,将其内联放在函数的右侧。它允许更好的 DSL 语法。

EDIT: 举个例子:

良好的用例之一是上下文编程。想象一下你有一个可关闭的物体。您想要限制其使用,以确保在不再需要时正确关闭它。在 Java 中,你有 try-with-resources:

try (final AutoCloseable myResource = aquireStuff()) {
  // use your resource here.
}

Kotlin 提供了use功能。现在,您可以执行以下任一操作:

acquireStuff().use( { doStuff1(it) ; doStuff2(it) } )

或写:

acquireStuff().use {
  doStuff1(it)
  doStuff2(it)
}

它看起来像 Java try-w-resource,但可以扩展到您的任何 API。允许您设计为最终用户提供高级构造的库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin:使用地图变换时 {} 和 () 之间的区别? 的相关文章

随机推荐

  • Java ArrayList 复制

    我有一个ArrayList l1大小为 10 我指定l1到新列表引用类型l2 Will l1 and l2指向相同ArrayList目的 或者是副本ArrayList对象分配给l2 当使用l2参考 如果我更新列表对象 它会反映l1参考类型也
  • 从 Jinja 渲染模板中删除不必要的空白

    我在用着curl观看我的网络应用程序的输出 当 Flask 和 Jinja 渲染模板时 输出中存在大量不必要的空白 它似乎是通过渲染 Flask WTF 和 Flask Bootstrap 的各种组件来添加的 我可以使用剥离这个sed 但是
  • protoc 在哪里以及如何安装它?

    我想使用protoc生成java文件的命令 我一直按照 github README 中的说明进行操作https github com protocolbuffers protobuf https github com protocolbuf
  • 如何检查目录或其任何子目录中是否存在特定文件

    在 C 中 如何检查目录或其任何子目录中是否存在特定文件 系统 IO 文件 存在似乎只接受单个参数 没有搜索子目录的重载 我可以用 LINQ 来做到这一点系统 IO 目录 GetFiles使用搜索选项 AllDirectories超载 但这
  • 按键时从文本区域获取最后一行

    我有一个文本区域字段 在每次按键时 我想将文本区域中的最后一行推送到数组中 目前 我正在每次按键时构建数组以获取文本区域中的最后一行 有没有办法优化这个 意思是 无需构造数组即可获取文本区域中的最后一行 jQuery mytextarea
  • 为 python 游戏添加再次玩选项

    我正在使用 python 为我的编程课制作一个游戏 我不知道当玩家输了或退出游戏时如何再次给他们选择 我正在使用Python 2 7 这是我的游戏的代码 import pygame sys time random from pygame l
  • Eclipse 中的一个文件中可以有多个类吗?

    Eclipse 中的一个 java 文件中是否可以包含多个类 或者我真的必须将每个文件放在不同的文件中吗 这只是 Eclipse 强加的东西 还是 Java 编译器有一些反对将所有内容放在同一个文件中的东西 根据 Java 规范 每个文件只
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 使用可编码的值,有时是 Int,有时是 String

    我有一个 API 有时会返回特定的键值 在本例中id 在 JSON 中作为 Int 有时它会以 String 的形式返回相同的键值 如何使用 codable 来解析该 JSON struct GeneralProduct Codable v
  • 在 Quickbooks v3 api 中断开应用程序连接

    我正在研究 Quickbooks v3 api 集成 我已经完成了所有集成 但陷入了 Quickbooks 从应用程序断开连接的状态 我正在使用以下代码片段来断开与 Quickbooks 的连接 final IAPlatformClient
  • 如何确保用户只提交英文文本

    我正在构建一个涉及自然语言处理的项目 由于nlp模块目前只处理英文文本 所以我必须确保用户提交的内容 不长 只有几个单词 是英文的 是否有既定的方法来实现这一目标 首选 Python 或 Javascript 方式 如果内容足够长我会推荐一
  • 为什么我必须在 POD 类型中重载operator==?

    我有一个定义如下的结构 struct Vec3 float x y z 当我尝试使用时std unique on a std vector
  • 如何从日期中获取微秒?

    我正在尝试从 a 中获取微秒Date 但我不能 Date date new Date No Date仅存储毫秒精度的值 如果您想要微秒精度 您可能需要看看JSR 310 http sourceforge net apps mediawiki
  • 如何更改 JAR 文件中的常规 JAVA COFFEE CUP 图标

    我可以更改框架中的 JAVA COFFEE CUP 图标 上 左 但如何更改 RUNNABLE JAR 文件的常规 JAVA COFFEE CUP 图片 是否有可能仅更改一个 JAR 文件的文件图标 谢谢 JAR 文件没有图标 操作系统为其
  • 如何在 Entity Framework Core 中调用标量函数

    下列的本文 http anthonygiretti com 2018 01 11 entity framework core 2 scalar function mapping 我试图使用 Entity Framework Core 将内部
  • 在两个页面/选项卡之间进行通信

    我想要一个 JavaScript 文件来控制两个 HTML 文件同时地 div div 那是第一页 接下来是第二页 div div
  • FXML load() 期间出现 JavaFX IllegalAccessException

    我有一个由以下代码调用的对话框窗口 DialogController是使用模式对话框窗口的辅助类 它主要将控制器引用与其窗口捆绑在一起 void handleServicesEdit ActionEvent event throws IOE
  • Laravel 5.3 Blade 解码 HTML 特殊字符

    我在数据库中保存了一些 HTML 代码 当我将这些数据发送到刀片时 CSS 无法正常工作 在页面源代码中我发现 我该用什么方法将 lt 转换为 有人可以帮助我吗 更改您的语法 to 这应该够了吧
  • 将我的应用程序翻译成匈牙利语

    我用英语开发了一个应用程序 我必须为客户翻译一些匈牙利语文本 我在values 文件夹中有一个menu xml 文件 并在values hu 文件夹中创建一个新的menu xml 我启动手机并选择马扎尔语言 选择了好的语言 我看到了匈牙利语
  • Kotlin:使用地图变换时 {} 和 () 之间的区别?

    我是科特林新手 我总是使用带花括号的地图变换 然后 为什么这有效 gt val x someList map SomeConstructor 这不是吗 val x someList map SomeConstructor 我在在线教程的任何