思考的(Int) -> Boolean
lambdaTest { int ->
int > 0 // can be also changed to it
}
這裏如果詮釋參數高於0.1
如果你想要更多的參數,我們返回true相當於下面的接口(實際上,這實際上是在JVM上編譯的):
interface Function<I, O> {
fun inkoke(param: I): O
}
I
是輸入參數的類型,O
是輸出類型(返回值)的類型。
Kotlin中的所有lambda實際上都是使用具有給定數量的參數和返回類型的單個方法定義對象的簡寫語法invoke
。 考慮到這一點,我們重寫你的高階函數。
fun lambdaTest(someMethod: Function<Int, Boolean>) {
// Call invoke with an Int paramater. This returns a Boolean.
val isTheAnswerOfTheUniverse = someMethod.invoke(42)
}
現在,我們使用這個方法:
// We can pass an anonymous class as the parameter
lambdaTest(object : Function<Int, Boolean>() {
override fun invoke(param: Int): Boolean {
println("Lambda called with number: $param")
// Prints "Lambda called with number: 42"
return param == 42
}
})
這是(Int) -> Boolean
相同。唯一的區別是語法:作爲科特林也是功能性的語言,它提供了語法糖,以提高可讀性和減少樣板,如
- 的專用語法用於定義用作可變
.invoke
可以省略(因爲它是一個)
- 一個用於定義lambda的專用語法,就像Java 8一樣(Kotlin使用大括號)。
- 如果lambda是高階函數的最後一個參數,則可以在括號外表示lambda。
這裏是等效採用lambda語法:
fun lambdaTest(someMethod: (Int) -> Boolean) {
val isTheAnswerOfTheUniverse = someMethod(42)
}
fun main(args: Array<String>) {
lambdaTest { param ->
println("Lambda called with number: $param")
// Prints "Lambda called with number: 42"
// The result of the last expression is returned
param == 42
}
}
謝謝!你的答案清除了一切。 – sunflower20