Kotlin是否具有身份识别function?

Scala在Predef中有一个通用的identity函数:

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

Kotlin在标准库中有类似的function吗? 当然,我可以直接使用{ it } ,但是我发现identity更易于阅读,并且实例化所有这些lambdaexpression式有点浪费。

对于任何types的Foo ,我必须能够在函数(Foo) -> Foo所在的地方使用这个identity函数。 在Kotlin的types系统中,这样的function甚至是可能的吗? (在斯卡拉的情况下,有一个隐式的转换,将函数对象内部的方法封装起来)

2 Solutions collect form web for “Kotlin是否具有身份识别function?”

目前没有这样的function,但你可以很容易地自己定义它:

 fun  identity(x: T): T = x 

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

如果您需要将身份函数作为parameter passing给另一个函数,则可以简单地使用{ it } 。 例如,它有一个List ,并且想要将其平铺到List ,则可以使用:

 list.flatMap(identity) 

identity是身份function。 这可以写成:

 list.flatMap { it } 

这相当于:

 list.flatMap { x -> x } 

另一种方法是在某个地方定义身份函数,比如:

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

但是我们不能创建一个通用的val ,所以我们必须为每个types定义一个标识函数。 解决方案(如在Java Function接口中完成的)将其定义为一个常量函数:

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

并将其用作:

 list.flatMap(identity) 

当然,写起来要容易得多:

 list.flatMap { it } 

一次声明一个身份函数(对所有types都适用)是不可能的,因为它必须被参数化。 什么是可能的是使用返回这个身份函数的函数:

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

虽然这样做是有用的,但是现在写下来并不是很有帮助:

 list.flatMap(identity()) 
  • 在Kotlin中,如何委托给一个接口并只提供一个无参的公共构造函数?
  • Kotlin:以函数的forms传递对象作为参考,并改变它的实例
  • 是否可以将引用传递给基本数组的第i个元素?
  • Android:将数据发送回MainActivity
  • Kotlin:二级构造函数参数中的“val”是不允许的
  • 与Kotlin 12编译时函数声明错误
  • 带有Kotlin错误的libGDX“org.jetbrains.kotlin.kapt.idea.KaptModelBuilderService”
  • 忽略setter并直接设置属性
  • Java类名中的Kotlin中的静态常量
  • 在Kotlin中可以使用Mockito吗?
  • 如何使用Kotlin在共享首选项中存储数据类对象?
  • Kotlin language will be the best programming language for Android.