Clojure具有一些有趣的功能,用於表示類型,包括但不限於deftype
,defprotocol
,reify
和extend
。Typed Racket中的打字特徵與Clojure中的類型特徵之間有什麼相似之處和不同之處?
Typed Racket中的打字特徵與Clojure中的類型特徵之間有什麼異同?
Clojure具有一些有趣的功能,用於表示類型,包括但不限於deftype
,defprotocol
,reify
和extend
。Typed Racket中的打字特徵與Clojure中的類型特徵之間有什麼相似之處和不同之處?
Typed Racket中的打字特徵與Clojure中的類型特徵之間有什麼異同?
deftype
和defprotocol
定義了Clojure中的動態行爲。在Racket中,我們會用struct
或struct-property
來做類似的事情,儘管在Racket中沒有什麼比較像defprotocol
。
編輯:球拍現在有generics,這就像Clojure協議。
reify
和extend
,我認爲,對應於在Racket中使用make-struct-type
,它動態創建新的結構類型。
類型化的球拍的最大區別,所有的這些功能,是類型化的球拍檢查您靜態程序 - 試圖運行它。您不能在Typed Racket程序中應用錯誤的訪問器,或將數字用作函數。你甚至不能運行一個可能有這樣的錯誤的程序。
目前,Clojure最類似於Type Racket的功能是它用於性能的註釋。
編輯:現在有Ambrose Bonnaire-Sergeant的Typed Clojure,這是靈感和基於類型球拍。