当元数据被评估时,原始别名可能无法正常工作,例如在def的情况下。
在这个例子中,char被解释为函数char而不是类型别名。这是因为clojure.lang.Compiler$DefExpr$Parser.parse在符号上评估了元数据。
(def ^char x \space) (String/valueOf x) => CompilerException java.lang.IllegalArgumentException: 无法解析类名: clojure.core$char@7b82f7d1
因此,这必须写成:
(def ^Character/TYPE x \space)
然而,在行内使用原始类型提示时,它们可以正常工作:
(def x \space) (String/valueOf ^char x)
原始类型别名应该一致地处理。
搜索结果显示这似乎是一个众所周知的问题,但没有找到针对它的 Jira 问题。