无法使用原始初始化程序键入提示本地

时间:2013-03-05 17:15:36

标签: clojure type-hinting

有人可以解释我这个错误:

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>
    
  • 如何键入提示本地整数变量?

1 个答案:

答案 0 :(得分:4)

编译器从this行抛出此异常。基本上,如果你使用一个表达式,它是一个原始常量或者可以在编译时被评估为基本常量的东西,比如:(+ 1 10),编译器可以检测对象本身的类型而不需要提示。检查早期链接指向的同一类中的getJavaClasshasJavaClass方法。这些方法检查表达式是否是原始的,然后从表达式本身获取类,否则使用类型提示(如果提供)。