kotlin:2个lambda参数的语法
kotlin: syntax for 2 lambda parameter
我是科特林的新手。我有一个带有 2 个重载方法的 java class。一个接受一个函数,一个接受两个
mapToEntry(Function<? super T, ? extends V> valueMapper)
和
mapToEntry(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends V> valueMapper)
nowm 在 kotlin 中,我正在尝试使用 2 个参数调用版本(如 java):
myClass.mapToEntry(r -> r, r -> r)
但我收到编译错误。
Kotlin: Unexpected tokens (use ';' to separate expressions on the same line)
正确的语法是什么?
在 Kotlin 中,lambda 表达式总是用花括号括起来,所以
myClass.mapToEntry({ r -> r }, { r -> r })
你很接近,你只需要用花括号把它们包起来...
myClass.mapToEntry({r -> r}, {r -> r})
此外,您可以利用 Kotlin 将 it
定义为 lambda 的默认单个参数这一事实。假设键和值都是字符串,并且你想反转键和值的大写(只是举个例子):
myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() })
基本语法:Lambda 表达式总是用花括号括起来:
val sum = { x: Int, y: Int -> x + y }
例子
让我们在 Kotlin 中定义一个类似于您的函数:
fun <T, K> mapToEntry(f1: (T) -> K, f2: (T) -> K) {}
第一个可能是直截了当的,我们简单地传递两个lambda如下:
mapToEntry<String, Int>({ it.length }, { it.length / 2 })
此外,很高兴知道如果 lambda 是传递给函数的最后一个参数,它可以像这样去掉括号:
mapToEntry<String, Int>({ it.length }) {
it.length / 2
}
第一个 lambda 在括号内传递,而第二个不是。
我是科特林的新手。我有一个带有 2 个重载方法的 java class。一个接受一个函数,一个接受两个
mapToEntry(Function<? super T, ? extends V> valueMapper)
和
mapToEntry(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends V> valueMapper)
nowm 在 kotlin 中,我正在尝试使用 2 个参数调用版本(如 java):
myClass.mapToEntry(r -> r, r -> r)
但我收到编译错误。
Kotlin: Unexpected tokens (use ';' to separate expressions on the same line)
正确的语法是什么?
在 Kotlin 中,lambda 表达式总是用花括号括起来,所以
myClass.mapToEntry({ r -> r }, { r -> r })
你很接近,你只需要用花括号把它们包起来...
myClass.mapToEntry({r -> r}, {r -> r})
此外,您可以利用 Kotlin 将 it
定义为 lambda 的默认单个参数这一事实。假设键和值都是字符串,并且你想反转键和值的大写(只是举个例子):
myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() })
基本语法:Lambda 表达式总是用花括号括起来:
val sum = { x: Int, y: Int -> x + y }
例子
让我们在 Kotlin 中定义一个类似于您的函数:
fun <T, K> mapToEntry(f1: (T) -> K, f2: (T) -> K) {}
第一个可能是直截了当的,我们简单地传递两个lambda如下:
mapToEntry<String, Int>({ it.length }, { it.length / 2 })
此外,很高兴知道如果 lambda 是传递给函数的最后一个参数,它可以像这样去掉括号:
mapToEntry<String, Int>({ it.length }) {
it.length / 2
}
第一个 lambda 在括号内传递,而第二个不是。