2017-11-04 10 views
0

私はscala Kotlinの両方に非常に新しく、いくつかのscalaコードをKotlinに変換する際に手を入れています。Scala関数をKotlin関数に変換する

私はこのスカラー関数を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

Javaで始まり、scalaプラグインを使用してScalaに変換することも、Kotlinプラグインを使用してJavaをKotlinに変換することもできます(IntelliJ IDEAまたはAndroid Studioを使用)。 - メニュー>ツール> Kotlin> Show Kotlin Bytecode 逆コンパイルボタンをクリック Javaコードをコピー –

+0

Scalaの場合は、代わりにマッピング関数から文字を出力する場合は 'mkString'は必要ありません。文字列と文字の混在。 –

答えて

3

まずオフ、いずれかKotlinは単にスカラのように表現をグループ化しない、クロージャを規定し、返すよう= { }を理解よう

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

又は

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

を書き込みます。これは、「推定された型は関数型です」というエラーメッセージが表示される理由です。 Scalaのデフォルトのセパレータは""で、Kotlinのデフォルトのセパレータは", "ですが

次に、Scalaの.mkString()は、Kotlinの.joinToString()のようなものです。

関連する問題