当前位置: 首页 > 知识库问答 >
问题:

科特林有身份功能吗?

景震博
2023-03-14

Scala在Predef中有一个通用的标识函数

def identity[A](x: A): A

Kotlin 在标准库中是否有类似的功能?当然,我可以简单地使用 { it } 来代替,但我发现标识更容易阅读,并且实例化所有这些 lambda 有点浪费。

我必须能够在函数(Foo)-


共有2个答案

容宏逸
2023-03-14

目前还没有这样的函数,但是您可以自己轻松定义它:

fun <T> identity(x: T): T = x

如果您认为有足够的用例可以在 Kotlin 标准库中声明此函数,请在 youtrack.jetbrains.com 提交问题。谢谢!

衡高寒
2023-03-14

如果您需要将标识函数作为参数传递给另一个函数,您可以简单地使用{it}。例如,如果您有一个List

list.flatMap(identity)

其中标识是标识函数。这可以写成:

list.flatMap { it }

这相当于:

list.flatMap { x -> x }

另一种方法是在某处定义标识函数,例如:

val identity: (List<String>) -> List<String> = { it }

但是我们不能创建一个通用的<code>val</code>,因此我们必须为每种类型定义一个标识函数。解决方案(正如在Java<code>函数</code>接口中所做的那样)是将其定义为常量函数:

fun <A> identity(): (A) -> A = { it }

并将其用作:

list.flatMap(identity)

当然,写起来容易得多:

list.flatMap { it }

一次性声明一个标识函数是不可能的(这将适用于所有类型),因为它必须参数化。可以使用返回此标识函数的函数:

fun <T> identity(): (T) -> T  = { it }

虽然它完成了这项工作,但它并不是很有帮助,因为现在必须写:

list.flatMap(identity())
 类似资料:
  • 如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties? 目前我喜欢下面的例子: 但是它看起来很丑陋,实际上不是一个iable,foo是常量ue,应该在启动期间初始化,将来不会改变。

  • 在Kotlin中,标题和正文都是可选的;如果类没有正文,则可以省略大括号。 所以我们可以像这样定义类, 这种类型的课有什么用?

  • 第三方身份赋予功能模块 自定义授权,用户将频道改为自定义授权模式,并设定好自定义地址,访客进入观看页后会先跳转到自定义网址,完成身份赋予后再跳转回来 第三方身份赋予密钥,用户在“媒体中心 ——> 基础配置”栏生成密钥后,用以给传输的数据加密 身份赋予接口,用户调用接口传输密文,完成身份赋予 用户得到带有识别码的Cookie,并跳转到指定网址 第三方身份赋予接口 GET /hubuser/api/a

  • 我有一个科特林·格雷德尔项目。我将Lombok添加为依赖项,并用kapt注册了它 未解析的引用:日志 显然没有应用注释处理。

  • 问题内容: 我正在学习具有C ++和Java背景的Kotlin。我期待下面的打印,不。我知道这对应到。默认实现不比较每个成员,即和吗?如果是这样,它会不会看到字符串值相等(因为再次映射到字符串值)?显然,我在Kotlin中还没有涉及平等与身份相关的问题。 问题答案: 您描述的默认实现仅适用于数据类。不适用于从中继承实现的常规类,只需使对象与自身相等即可。