思考的(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