基本的 Lambdas
當可以從上下文推斷出輸入型別引數時,可以省略輸入型別引數。例如,假設你在一個帶有函式的類上有一個函式:
data class User(val fistName: String, val lastName: String) {
fun username(userNameGenerator: (String, String) -> String) =
userNameGenerator(firstName, secondName)
}
你可以通過傳遞 lambda 來使用此函式,並且由於引數已在函式簽名中指定,因此無需在 lambda 表示式中重新宣告它們:
val user = User("foo", "bar")
println(user.userName { firstName, secondName ->
"${firstName.toUppercase}"_"${secondName.toUppercase}"
}) // prints FOO_BAR
當你將 lambda 分配給變數時,這也適用:
//valid:
val addition: (Int, Int) = { a, b -> a + b }
//valid:
val addition = { a: Int, b: Int -> a + b }
//error (type inference failure):
val addition = { a, b -> a + b }
當 lambda 採用一個引數,並且可以從上下文推斷出型別時,可以通過 it
引用引數。
listOf(1,2,3).map { it * 2 } // [2,4,6]