Hi, Am 21.10.2009 um 20:49 schrieb Shel:
> (defmulti area (fn [s m] [(:shape s) (:measure m)]))
> (defmethod area[:rectangle :side] [s m] (* (:side m) (:side m)))
> (defmethod area[:rectangle :sides] [s m] (* (:side1 m) (:side2 m)))
> (derive ::square ::rectangle)
> user=> (area {:shape :square} {:measure :side :side 2})
You have to use ::square and ::rectangle in the multimethod and the
maps as you did in the derive.
(defmulti area (fn [s m] [(:shape s) (:measure m)]))
(defmethod area[::rectangle ::side] [s m] (* (:side m) (:side m)))
(defmethod area[::rectangle ::sides] [s m] (* (:side1 m) (:side2 m)))
(derive ::square ::rectangle)
(area {:shape ::square} {:measure ::side :side 2})
This should do the trick.
Sincerely
Meikel
smime.p7s
Description: S/MIME cryptographic signature
