![](/img/trans.png)
[英]Wanted: Matlab example of an anonymous function returning more than 1 output
[英]Returning anonymous functions rather than lambda function
我不明白為什么wrong
功能在Kotlin中是非法的
fun right1() : (String) -> String {
return {
when {
it.isEmpty() -> "Empty"
else -> it.reversed()
}
}
}
fun wrong() : (String) -> String {
return fun(s: String): String {
when {
s.isEmpty() -> "Empty"
else -> s.reversed()
}
}
}
fun right2() : (String) -> String {
return {
s: String ->
when {
s.isEmpty() -> "Empty"
else -> s.reversed()
}
}
}
看來我只能返回lambda函數和非匿名函數。
對不起這個瑣碎的問題,我是Kotlin的再見。
首先,讓我們檢查right1
和right2
為什么正確。 既然你返回拉姆達和拉姆達將返回其最后一個表達式是when
它會為工作right1
和right2
。
現在,讓我們看一下wrong
。 編譯器將給出以下錯誤。
具有塊主體的函數中需要“返回”表達式。
因此,您要做的就是在when
之前添加return
語句,如下所示:
fun notWrong() : (String) -> String {
return fun(s: String): String {
return when {
s.isEmpty() -> "Empty"
else -> s.reversed()
}
}
}
但是有更好的方法! 請注意,您可以像這樣利用Kotlin的類型推斷:
fun notWrong() = { s: String -> // parameter of lambda is a String
when { // String is inferred as return type of when expression
s.isEmpty() -> "Empty"
else -> s.reversed()
}
}
這是多余的,並且做相同的事情:返回一個lambda,該lambda以String
作為參數,然后返回String
。
調用返回的lambda將如下所示:
notWrong()("Hello World")
第一對括號用於notWrong
的調用,第二對括號用於lambda的調用。
您可以返回匿名函數。 只需添加return
之前的語句when
,它會工作:
fun wrong() : (String) -> String {
return fun(s: String): String {
return when {
s.isEmpty() -> "Empty"
else -> s.reversed()
}
}
}
您可以這樣稱呼它:
wrong()("string")
// or using a variable:
val v = wrong()
v("string")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.