用于将类型与变量关联以用于发生键入的奇怪语法

时间:2014-09-30 11:30:48

标签: types clojure clojure-core.typed

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方式,但我无法理解为什么选择这种语法这样做。

1 个答案:

答案 0 :(得分:1)

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

我们忘记了1(Val 1),并认为其类型为Any。通过这种方式,我们可以演示如何使用类型为Any的本地绑定进行输入。

你也可以像clojure.core.typed/let那样写它:

(let [a :- Any, 1]
  (cond
    (symbol? a) a
    (number? a) a))