将Scala函数转换为Kotlin函数

时间:2017-11-04 20:50:48

标签: 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
}

我知道Kotlin中没有mkString等效,但我想像是

fun changeXToDigit(value: String):String = {
   value.map { it ->
      when(it) {
        'X' -> random.nextInt(10).toString
        else -> it
   }
}

可能会有效,但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.

1 个答案:

答案 0 :(得分:5)

首先,写一下

fun changeXToDigit(value: String): String = // no curly braces

fun changeXToDigit(value: String): String { // no equals

因为Kotlin将= { }理解为定义并返回一个闭包,而不仅仅像在Scala中一样对表达式进行分组。这就是为什么错误消息说"推断类型是函数类型"。

接下来,Scala的.mkString()就像Kotlin的.joinToString(),虽然Scala的默认分隔符是""和Kotlin的默认分隔符是", "