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