2017-06-03 5 views
4

私はこのvideoの最初の例から高次関数を学習しようとしていました。ここに私のコードと出力があります。コトリン反射は利用できません

コード

fun lowercase(value: String) = value.toLowerCase() 

fun higherOrder(value:String, op: (String) -> String) : String { 
    println("Executing higher order fun $op") 
    return op(value) 
} 

fun main(args: Array<String>) { 
    println(higherOrder("HELLO", ::lowercase)) 
    println(higherOrder("hello", {it -> lowercase(it)})) 
    println(higherOrder("HeLlo", { x -> lowercase(x) })) 
    println(higherOrder("Hello", { lowercase(it) })) 
} 

出力

Executing higher order fun function lowercase (Kotlin reflection is not available) 
hello 
Executing higher order fun Function1<java.lang.String, java.lang.String> 
hello 
Executing higher order fun Function1<java.lang.String, java.lang.String> 
hello 
Executing higher order fun Function1<java.lang.String, java.lang.String> 
hello 

Process finished with exit code 0 

だから私の質問は、なぜそれがKotlinの反射が利用できません印刷しないのですか?

答えて

7

フルリフレクションにはkotlin-stdlibに加えてkotlin-reflectライブラリが必要です。 フルリフレクションが利用可能な場合は、より包括的なtoString()、つまりメッセージが表示されます。

+2

それでおしまい。 org.jetbrains.kotlinをコンパイルする:kotlin-reflect:$ kotlin_version "をbuild.gradleに追加して問題を修正しました。 –

+0

リフレクションライブラリを追加すると、自分のビルドで問題が解決しましたが(素晴らしい!)、APKをビルドできません。コンパイラは '実行に失敗したタスク 'をスローします:app:transformDexArchiveWithExternalLibsDexMergerForDebug'.'それを修正する理由は何ですか? –

関連する問題