我怎么定义“>”在我自己的clojure记录类型的方法

时间:2013-12-19 06:02:56

标签: clojure clojurescript

我有这样的记录:

(defrecord MyRec [name val])

我想根据val字段比较实例:

(def foo (->MyRec :foo 1))
(def bar (->MyRec :bar 2))
(> foo bar)
=> false

1 个答案:

答案 0 :(得分:3)

首先,您应该从ns声明中排除clojure.core/>,如下所示:

(ns foo
  (:refer-clojure :exclude [>]))

然后试试这个:

(defprotocol FooComparable
  (> [a b]))

(defrecord MyRec [name val]
  FooComparable
  (> [a b] (clojure.core/> (:val a) (:val b))))

(def a (MyRec. :foo 1))
(def b (MyRec. :bar 2))

(> a b) ; false
(> b a) ; true