15

Clojure 有一些用于表示类型的有趣特性,包括但不限于deftypedefprotocol和。reifyextend

Typed Racket 中的打字功能与 Clojure 中的类类型功能有何异同?

4

1 回答 1

17

deftypedefprotocol在 Clojure 中定义动态行为。在 Racket 中,我们会用structor来做类似的事情struct-property,尽管在 Racket 中没有什么完全一样defprotocol的。

编辑:球拍现在有泛型,就像 Clojure 协议。

reifyextend,我认为,对应make-struct-type于 Racket 中的使用,它动态地创建新的结构类型。

Typed Racket 和所有这些功能的最大区别在于 Typed Racket在尝试运行之前静态检查您的程序。您永远不能在 Typed Racket 程序中应用错误的访问器,或者将数字用作函数。你甚至不能运行一个可能有这样错误的程序。

目前,Clojure 最像 Typed Racket 的特性是它用于性能的注解。

编辑:现在有 Ambrose Bonnaire-Sergeant 的Typed Clojure,它的灵感来自 Typed Racket。

于 2012-03-04T23:04:22.760 回答