2014-09-30 61 views
0

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)?我想這是一種通過註釋1然後將a設置爲該值來設置a類型的方法/慣用方法,但我無法真正理解爲什麼這是選擇此語法的語法。

回答

1

ann-form只是忘記了關於特定表達式的類型信息。

這裏我們忘記了1(Val 1),並且在程序的其餘部分考慮它的類型爲Any。通過這種方式,我們可以演示如何使用Any類型的本地綁定進行分類。

您還可以使用clojure.core.typed/let寫像這樣:

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

所以我只想澄清,1所使用的約定,但可以是任何價值?爲什麼有必要爲'a'(而不僅僅是一個類型)賦值來使事件類型工作? – 2014-10-01 17:57:52

+0

我的同事向我解釋說,一個變量不能在沒有賦值的情況下被聲明,所以忽略我的Clojure n00b問題。這一切對我來說都是有意義的(假設我是對的,1只是按慣例使用,而不是任意的值)。 – 2014-10-02 08:08:04

+0

是的,將任何東西都替換爲1.將'let'改爲'fn'並傳遞1可能是一個更清晰的例子。 – Ambrose 2014-10-03 18:53:45