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,而第二个不是。