Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lambda 关于lamba表达式中返回的问题_Lambda_Kotlin - Fatal编程技术网

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()
返回。