1
我有這樣的記載:我如何定義「>」法在我自己的記錄類型Clojure中
(defrecord MyRec [name val])
我想基於瓦爾領域比較實例:
(def foo (->MyRec :foo 1))
(def bar (->MyRec :bar 2))
(> foo bar)
=> false
我有這樣的記載:我如何定義「>」法在我自己的記錄類型Clojure中
(defrecord MyRec [name val])
我想基於瓦爾領域比較實例:
(def foo (->MyRec :foo 1))
(def bar (->MyRec :bar 2))
(> foo bar)
=> false
首先,你應該從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
真棒,謝謝) –
爲什麼不使用'java.util.comparator'通用接口? –
如果我理解你對,你問爲什麼不使用'java.util.Comparator'而不是'FooComparable'?原因就在於我認爲作者想要函數被完全稱爲'>' – hsestupin