我对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.
答案 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的默认分隔符是", "
。