21得票1回答
在Clojure中什么时候应该使用deftype?

昨天,Rich将Clojure的“new”分支合并到了主分支上。我们现在正在采用deftype和defprotocol这两个美妙的特性。当然,我来自Haskell,很想像在Haskell中一样定义类型,除了临时元组之外几乎所有东西都是这样,但我认为在Clojure的世界中不是这样的; )。在C...

21得票2回答
Clojure deftype中的可变字段是什么?

我正在尝试使用Clojure 1.2,具体来说是可变字段,根据clojure.org文档,这在deftype中是受支持的。 但是我无法使其正常工作。更新字段的语法是什么?或者可变性还没有实现吗?(definterface IPoint (getX []) (setX [v])) (...

14得票2回答
如何在Clojure中使用位于其它命名空间的类型?

我使用Leiningen创建了一个名为techne的项目。我创建了一个名为scrub的模块,在其中定义了一个名为Scrub的类型和一个名为foo的函数。 techne/scrub.clj:(ns techne.scrub) (deftype Scrub [state] Objec...

11得票1回答
如何实现递归deftype?

我想知道如何创建一个包含对其自身的引用的Clojure deftype,例如: (deftype BinaryTree [^BinaryTree left ^BinaryTree right]) 这不起作用......但是我没有看到任何固有的原因,为什么它不可能实现,因为底层的Java类完全...

11得票1回答
在Clojure的deftype中覆盖equals,hashCode和toString方法

我正在尝试使用deftype在Clojure中创建一个新类型,以实现一个二维(x,y)坐标,并实现“位置”协议。 我还希望这个类型实现标准的Java equals,hashCode和toString方法。 我的初始尝试是: (defprotocol Location (get-...

7得票2回答
在defmethod中使用Common Lisp用户定义类型

我希望能够将一个定义好的类型用作defmethod的参数特化器。这样做的动机是为了提高可读性并在以后更灵活地进行更改。类似于这样: (deftype foo () 'fixnum) (defmethod bar ((x foo)) ...) (defmethod baz ((x foo)...

7得票2回答
Clojure中的嵌套类型?

在Clojure中,我如何为我创建的类型进行类型提示?(我想嵌套这些类型。) 例如,我曾认为以下代码可以工作: (deftype A [#^somePrimitive someField]) (deftype B [#^A Avalue]) 这会弹出一个错误消息: ...

7得票1回答
我该如何定义一个实现servlet接口的clojure类型?

我正在尝试使用deftype(来自最新的Clojure 1.2分支)创建一个实现Java Servlet接口的Java类。我期望下面的代码能够编译通过(即使它没有什么用处)。 (ns foo [:import [javax.servlet Servlet ServletRequest Ser...

7得票1回答
使用Clojure deftype作为参数化函数

我正在尝试在编译器中使用Clojure,因此需要对deftype的调用进行参数化;但是,我很难让类型提示传递。请考虑以下代码: (defn describe [x] (let [fields (.getDeclaredFields x) names (map #(.ge...

7得票1回答
Clojure中相互引用的deftype

我想在我的Clojure deftype中实现"transient"和"persistent!"。据我所知,这意味着有另一个deftype,TransientMyThing,需要实现必要的方法。到目前为止还好,但是这两个类需要知道彼此以便返回对方的实例。 我认为可以通过预先声明Clojure...