kotlin:2个lambda参数的语法
我是新来的kotlin。 我有一个与2重载的方法的Java类。 一个接受一个function,另一个接受两个function
mapToEntry(Function valueMapper)
和
mapToEntry(Function keyMapper, Function valueMapper)
nowm in kotlin,我试图调用与2参数的版本(如在Java中):
myClass.mapToEntry(r -> r, r -> r)
但我得到编译错误。
Kotlin:意外的令牌(使用’;’来分隔同一行上的expression式)
什么是正确的语法?
在Kotlin中,lambdaexpression式总是被大括号所包围,所以就是这样
myClass.mapToEntry({ r -> r }, { r -> r })
请参阅: Lambdaexpression式语法
你很近,你只需要用花括号把它们包起来。
myClass.mapToEntry({r -> r}, {r -> r})
另外,您可以利用Kotlin将it
定义为lambda默认单个参数的事实。 假设键和值都是字符串,并且想要反转键和大写字母的值(只是举例):
myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() })
基本语法 :Lambdaexpression式总是包裹在大括号中:
val sum = { x: Int, y: Int -> x + y }
例
让我们在Kotlin中定义一个类似于你的函数:
fun mapToEntry(f1: (T) -> K, f2: (T) -> K) {}
第一个可能是直截了当的,我们只是通过两个lambdaexpression式如下:
mapToEntry({ it.length }, { it.length / 2 })
此外,知道如果lambda是传递给函数的最后一个参数,它可以像下面这样被调出:
mapToEntry({ it.length }) { it.length / 2 }
第一个lambda是通过内部的parantheses,而第二个不是。