将Scala函数转换为Kotlin函数

men*_*ole 0 scala kotlin

我对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)

eph*_*ent 5

首先,要么写

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的默认分隔符", ".