(defmacro lol2 []
(let [a (list `typed/Option `typed/AnyInteger)]
`(fn [] :- ~a 1)))
(defmacro lol []
`(fn [] :- (typed/Option typed/AnyInteger) 1))
(clojure.core.typed/def lol*2 :- [-> (typed/Option typed/AnyInteger)]
(lol2))
(clojure.core.typed/def lol* :- (typed/Option typed/AnyInteger)
(lol))
我将此代码放在名称空间 A 中,两个都通过了类型检查,没有问题。
当 A 依赖于名称空间 B 时,当 B 进行检查时
lol*2 完全正常,但 lol* 报错
"Bad type syntax: (clojure.core.typed/Option clojure.core.typed/AnyInteger)"
以下代码运行正常。
(defmacro lol**3 []
`(fn [] :- typed/AnyInteger 1))
(clojure.core.typed/def lol*3 :- typed/AnyInteger)
(lol**3))