结果一直说:"Type mismatch: inferred type is Unit but String was expected"
The result keeps saying: "Type mismatch: inferred type is Unit but String was expected"
我在 play.kotlinlang.org 上有 运行 以下代码,但结果一直显示:Type mismatch: inferred type is Unit but String is expected
(我对原始示例代码进行了一些更改)
我不知道为什么它的推断类型是Unit。
我以为我宣布返回类型为 String。
是 println()
单元的类型还是我刚刚写的整个 ring
函数有误?
fun main(){
val squid:(String)->String={str->println("I'm $str")}
//ring(::rabbit)
ring(squid)
}
fun rabbit(str:String):String{
println("I'm $str")
return str
}
fun ring(carrot:(String)->String){
carrot("a appetiting squid")
}
正如 Animesh 指出的那样,您没有 returning String
n squid
val squid:(String)->String
定义了一个接受字符串的 lambda,return 是一个字符串
{str->println("I'm $str")}
lambda 将 return lambda 最后一行的值,但在这种情况下,最后一个值是 println("I'm a $str")
println
return Unit
,或者更确切地说,它没有 return 任何东西(这就是 Unit
所代表的)。因此,如果您仍想打印 String AND return 它,请像这样重写它:
{ str ->
println("I'm $str")
str // This string is the value that will now be returned.
}
lambda returns Unit
因为 println
returns Unit
.
你可以这样写那一行:
val squid:(String)->String={str-> str.also { println("I'm $it") }}
标准 also
扩展函数允许您在表达式中使用值(因为它 returns 值本身),但“也”先用它做一些事情。
我在 play.kotlinlang.org 上有 运行 以下代码,但结果一直显示:Type mismatch: inferred type is Unit but String is expected
(我对原始示例代码进行了一些更改)
我不知道为什么它的推断类型是Unit。
我以为我宣布返回类型为 String。
是 println()
单元的类型还是我刚刚写的整个 ring
函数有误?
fun main(){
val squid:(String)->String={str->println("I'm $str")}
//ring(::rabbit)
ring(squid)
}
fun rabbit(str:String):String{
println("I'm $str")
return str
}
fun ring(carrot:(String)->String){
carrot("a appetiting squid")
}
正如 Animesh 指出的那样,您没有 returning String
n squid
val squid:(String)->String
定义了一个接受字符串的 lambda,return 是一个字符串
{str->println("I'm $str")}
lambda 将 return lambda 最后一行的值,但在这种情况下,最后一个值是 println("I'm a $str")
println
return Unit
,或者更确切地说,它没有 return 任何东西(这就是 Unit
所代表的)。因此,如果您仍想打印 String AND return 它,请像这样重写它:
{ str ->
println("I'm $str")
str // This string is the value that will now be returned.
}
lambda returns Unit
因为 println
returns Unit
.
你可以这样写那一行:
val squid:(String)->String={str-> str.also { println("I'm $it") }}
标准 also
扩展函数允许您在表达式中使用值(因为它 returns 值本身),但“也”先用它做一些事情。