首页 文章

kotlin:2 lambda参数的语法

提问于
浏览
1

我是kotlin的新手 . 我有一个带有2个重载方法的java类 . 一个接受一个功能,另一个接受两个功能

mapToEntry(Function<? super T, ? extends V> valueMapper)

mapToEntry(Function<? super T, ? extends K> keyMapper, 
           Function<? super T, ? extends V> valueMapper)

nowm in kotlin,我试图调用带有2个参数的版本(如java中所示):

myClass.mapToEntry(r -> r, r -> r)

但我得到编译错误 .

Kotlin:意外的令牌(使用';'来分隔同一行上的表达式)

什么是正确的语法?

3 回答

  • 5

    在Kotlin中,lambda表达式总是被花括号括起来,所以就是这样

    myClass.mapToEntry({ r -> r }, { r -> r })
    

    见:Lambda Expression Syntax

  • 4

    你很亲密,你只需要用花括号包裹它们......

    myClass.mapToEntry({r -> r}, {r -> r})
    

    此外,您可以利用Kotlin将 it 定义为lambda的默认单个参数这一事实 . 假设键和值都是字符串,并且您想要反转键和大写值(只是组成一个例子):

    myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() })
    
  • 1

    Basic Syntax :Lambda表达式始终用大括号括起来:

    val sum = { x: Int, y: Int -> x + y }
    

    示例

    让我们在Kotlin中定义一个类似于你的函数:

    fun <T, K> mapToEntry(f1: (T) -> K, f2: (T) -> K) {}
    

    first 可能是直截了当的,我们只是传递两个lambdas,如下所示:

    mapToEntry<String, Int>({ it.length }, { it.length / 2 })
    

    另外,最好知道如果lambda是传递给函数的最后一个参数,它可以像这样提取出parantheses:

    mapToEntry<String, Int>({ it.length }) {
        it.length / 2
    }
    

    第一个lambda在parantheses内部传递,而第二个lambda不在 .

相关问题