有人可以解释我这个错误:
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>
如何键入提示本地整数变量?
答案 0 :(得分:4)
编译器从this行抛出此异常。基本上,如果你使用一个表达式,它是一个原始常量或者可以在编译时被评估为基本常量的东西,比如:(+ 1 10)
,编译器可以检测对象本身的类型而不需要提示。检查早期链接指向的同一类中的getJavaClass
和hasJavaClass
方法。这些方法检查表达式是否是原始的,然后从表达式本身获取类,否则使用类型提示(如果提供)。