在https://github.com/clojure/core.typed/wiki/User-Guide#occurrence-typing中,提供了一个发生输入的例子:
clojure.core.typed=> (cf (let [a (ann-form 1 Any)]
(cond
(symbol? a) a
(number? a) a)))
(U Sym Num nil)
为什么要使用(ann-form 1 Any)
?我想通过注释a
然后将1
设置为该值来设置a
的类型是一种hacky / idiomatic方式,但我无法理解为什么选择这种语法这样做。
答案 0 :(得分:1)
ann-form
只是忘记了有关特定表达式的类型信息。
我们忘记了1
是(Val 1)
,并认为其类型为Any
。通过这种方式,我们可以演示如何使用类型为Any
的本地绑定进行输入。
你也可以像clojure.core.typed/let那样写它:
(let [a :- Any, 1]
(cond
(symbol? a) a
(number? a) a))