首先这是我的代码
fun <T> max(strings : List<T>, compare : (acc:T, nextElement : T) -> Boolean) : T {
var s : T = strings[0]
for (t in strings) {
if(compare(s,t))
s = t
}
return s
}
fun lookForAlice (people : ArrayList<out Person>) {
people.forEach{ if (it.name == "Alice") {println("Found"); return}}
}
fun main() {
val ints : List<Int> = listOf(1,333,44,3333)
println(max(ints, {a, b -> if(a < b) {return true}})) // Error Here!!!
}
我知道lambda表达式中可能有“ return”,但是我在上面提到的那一行上有错误。
答案 0 :(得分:3)
Lambda表达式通常没有显式的return
语句。相反,返回值仅是最后一个(或唯一)表达式的结果,因此您只需要这样做:
{ a, b -> a < b }
如果您确实需要显式return
,则必须使用标签对其进行限定。 Kotlin为您自动生成一个。它的名称是您将lambda传递给的函数:
{ a, b -> if (a < b) return@max true else return@max false }
请注意,您必须具有else
部分;否则,如果比较结果为假,则Kotlin不知道要返回什么。
或者,因为if
是一个表达式:
{ a, b -> return@max if (a < b) true else false }
...但是不建议使用if (x) true else false
构造,因为它仅相当于x
。
未标记的返回值始终从封闭的“适当”函数返回,而不是从lambda返回。