8

誰かが私にこのエラーを説明してもらえますか:

user> (let [^int i 3] i)
CompilerException java.lang.UnsupportedOperationException: Can't type hint a local with a primitive initializer, compiling:(NO_SOURCE_PATH:1)

理解できない、

  • ヒントを入力できない正確な理由とその理由は何ですか?

  • 同じ状況で配列型ヒントを使用できるのはなぜですか?

    user> (let [^ints ii (int-array 1)] ii)
    #<int[] [I@334a123f>
    
  • ローカル整数変数をタイプヒントする方法は?

4

1 に答える 1

6

この例外は、この行からコンパイラによってスローされます。基本的に、プリミティブ定数である式、またはコンパイル時にプリミティブ定数として評価できる式 (:(+ 1 10)など) を使用すると、コンパイラはオブジェクト自体の型を検出でき、型ヒントは必要ありません。前のリンクが指している同じクラスの メソッドgetJavaClassとメソッドを確認してください。hasJavaClassこれらのメソッドは、式がプリミティブかどうかをチェックし、式自体からクラスを取得します。そうでない場合は、提供されている場合は型ヒントを使用します。

于 2013-03-06T05:04:15.570 に答える