将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. 

首先,要么写

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

要么

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

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

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