关于兰巴表达返回的问题

时间:2018-12-16 15:09:50

标签: lambda kotlin

首先这是我的代码

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”,但是我在上面提到的那一行上有错误。

1 个答案:

答案 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返回。