Scala 有一个泛型identity
Predef 中的函数:
def identity[A](x: A): A
Kotlin 在标准库中有类似的工具吗?当然我可以简单地使用{ it }
相反,但我发现identity
更容易阅读,并且实例化所有这些 lambda 有点浪费。
我必须能够使用这个identity
在函数所在的地方函数(Foo) -> Foo
预计对于任何类型Foo
。这样的功能在 Kotlin 的类型系统中是否可能存在? (对于 Scala,有一个隐式转换将方法包装在函数对象或其他东西中。)
如果您需要将恒等函数作为参数传递给另一个函数,您可以简单地使用{ it }
。例如,如果您有一个 List> 并希望将其展平为 List,您可以使用:
list.flatMap(identity)
where identity
是恒等函数。这可以写成:
list.flatMap { it }
这相当于:
list.flatMap { x -> x }
另一种方法是在某处定义恒等函数,例如:
val identity: (List<String>) -> List<String> = { it }
但我们无法创建一个通用的val
,所以我们必须为每种类型定义一个恒等函数。解决方案,(就像在Java中完成的那样)Function
接口)是将其定义为常量函数:
fun <A> identity(): (A) -> A = { it }
并将其用作:
list.flatMap(identity)
当然,这样写就容易多了:
list.flatMap { it }
一次性声明一个恒等函数(适用于所有类型)是不可能的,因为它必须被参数化。可能的是使用返回此恒等函数的函数:
fun <T> identity(): (T) -> T = { it }
虽然它完成了这项工作,但它并不是很有帮助,因为现在必须写:
list.flatMap(identity())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)