Types 将类型与引用类型的变量关联的奇怪语法

Types 将类型与引用类型的变量关联的奇怪语法,types,clojure,clojure-core.typed,Types,Clojure,Clojure Core.typed,在引用类型的示例中,提供了: clojure.core.typed=> (cf (let [a (ann-form 1 Any)] (cond (symbol? a) a (number? a) a))) (U Sym Num nil) 为什么要使用(ann表格1任何)?我想通过注释1然后将a设置为该值来设置a的类型是一种老

在引用类型的示例中,提供了:

clojure.core.typed=> (cf (let [a (ann-form 1 Any)]
                           (cond
                            (symbol? a) a
                            (number? a) a)))
(U Sym Num nil)

为什么要使用
(ann表格1任何)
?我想通过注释
1
然后将
a
设置为该值来设置
a
的类型是一种老套/惯用的方法,但我真的不明白为什么选择这种语法来做这件事。

ann form
只是忘记了关于特定表达式的类型信息

<>这里我们忘记<代码> 1 >代码>是<代码>(Vall 1)< /C>,并考虑它的类型<代码>任何程序其余部分。通过这种方式,我们可以演示引用类型如何与
Any
类型的本地绑定一起工作

你也可以这样写:


所以我想澄清一下,1是按惯例使用的,但可以是任何值?为什么必须为
a
(而不仅仅是类型)赋值才能使事件类型工作?我的同事向我解释说,变量不能在不给它赋值的情况下声明,所以忽略我的Clojure n00b问题。现在对我来说,这一切都是有意义的(假设我是对的,1只按约定使用,而不是任意值)。是的,用任何值替换1。将
let
更改为
fn
并仅传递1可能是一个更清楚的示例。
(let [a :- Any, 1]
  (cond
    (symbol? a) a
    (number? a) a))