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 回答