我对scala Kotlin都非常陌生,并尝试将一些scala代码转换为Kotlin,以此来解决问题.
我遇到的一个问题就是将这个scala函数转换为Kotlin函数.
def changeXToDigit(value:String): String = {
value.map {
case 'X' => random.nextInt(10).toString
case letter => letter
}.mkString
}
Run Code Online (Sandbox Code Playgroud)
我知道在Kotlin中没有mkString等价物,但我想到了类似的东西
fun changeXToDigit(value: String):String = {
value.map { it ->
when(it) {
'X' -> random.nextInt(10).toString
else -> it
}
}
Run Code Online (Sandbox Code Playgroud)
可能会工作,但IntelliJ抱怨它,我有点迷失了错误.
Error:(11, 45) Kotlin: Inferred type is a function type, but a non-function type String was expected. Use either '= ...' or '{ ... }', but not both.
Run Code Online (Sandbox Code Playgroud)
首先,要么写
fun changeXToDigit(value: String): String = // no curly braces
Run Code Online (Sandbox Code Playgroud)
要么
fun changeXToDigit(value: String): String { // no equals
Run Code Online (Sandbox Code Playgroud)
因为Kotlin理解= { }为定义和返回一个闭包,而不仅仅是像Scala那样对表达式进行分组.这就是错误消息"推断类型是函数类型"的原因.
接下来,Scala .mkString()就像Kotlin一样.joinToString(),虽然Scala的默认分隔符是""Kotlin的默认分隔符", ".