Lambda 关于lamba表达式中返回的问题
首先,这是我的代码Lambda 关于lamba表达式中返回的问题,lambda,kotlin,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 (peopl
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!!!
}
funmax(字符串:列表,比较:(acc:T,nextElement:T)->布尔值):T{
var s:T=字符串[0]
for(字符串中的t){
如果(比较(s,t))
s=t
}
返回s
}
趣味lookForAlice(人物:ArrayList){
people.forEach{if(it.name==“Alice”){println(“Found”);return}
}
主要内容(){
val ints:List=listOf(1333,443333)
println(max(ints,{a,b->if(a
我知道lambda表达式中可能有“return”,但我在我所说的行中有错误。。有什么不对吗 Lambda表达式通常没有显式的
return
语句。相反,返回值只是最后一个(或唯一一个)表达式的结果,因此您只需要:
{ a, b -> a < b }
请注意,您必须有一个else
部件;否则,如果比较为假,Kotlin不知道返回什么
或者,因为如果是一个表达式:
{ a, b -> return@max if (a < b) true else false }
{a,b->return@max如果(a
…但是不鼓励使用if(x)true else false
构造,因为它只相当于x
未标记的返回总是从封闭的“property”函数返回,而不是从lambda返回。lambda表达式通常没有显式的return
语句。相反,返回值只是最后一个(或唯一一个)表达式的结果,因此您只需要:
{ a, b -> a < b }
请注意,您必须有一个else
部件;否则,如果比较为假,Kotlin不知道返回什么
或者,因为如果是一个表达式:
{ a, b -> return@max if (a < b) true else false }
{a,b->return@max如果(a
…但是不鼓励使用if(x)true else false
构造,因为它只相当于x
未标记的返回总是从封闭的“正确”函数返回,而不是从lambda返回。Well。。对不起我的解释。但是为什么people.forEach{if(it.name==“Alice”){println(“Found”);return}}是允许的,而在我的例子中,{a,b->if(areturn
。有时,您确实希望在lambda函数内部决定从其父函数返回。我不知道他们为什么选择后者作为默认值。{if(it.name==“Alice”){println(“find”);return}
是一个lambda,一旦找到Alice,它会导致所有的lookForAlice()
返回。但是在max()
调用中,lambda用于比较元素,您不想从main()返回
比较第一对元素后。在{a,b->if(a
上出现语法错误的原因是此lambda仅包含一个顶级表达式,即if
。但是如果使用if
作为表达式,则还必须具有else
部分。请尝试{a,b->if(a
并查看它没有执行您想要的操作:不会打印任何内容,因为第一次由max()
调用lambda时,lambda会告诉main()
返回。很抱歉我的解释。但是为什么允许使用people.forEach{if(it.name==“Alice”){println(“find”);return}和{a,b->if(areturn
。有时,您确实希望在lambda函数内部决定从其父函数返回我不知道他们为什么选择后者作为默认值。{if(it.name==“Alice”){println(“find”);return}
是一个lambda,一旦找到Alice,它会导致所有的lookForAlice()
返回。但是在max()
调用中,lambda用于比较元素,您不想从main返回()
比较第一对元素后。在{a,b->if(a
上出现语法错误的原因是,此lambda仅包含一个顶级表达式,即if
。但是如果使用if
作为表达式,则还必须具有else
部分。请尝试{a,b->if(a
并查看它没有执行您想要的操作:不会打印任何内容,因为当max()
第一次调用lambda时,lambda会告诉main()
返回。