Skip to content

Instantly share code, notes, and snippets.

(ns enhanced-record
(:require [clojure.contrib.str-utils2 :as str2])
(:use [clojure.string :only (join)]
[clojure.contrib.pprint :only
(*simple-dispatch* use-method pprint-map pprint)]))
;;;; enhanced records
;; internal helper for maps
(defrecord Car [year make model])
(defrecord2 RocketCar [color fuel name])
(Car. 2010 "Honda" "Civic")
(Car. 2010 "Honda" "Civic")
;; -> #:enhanced-record-blog.Car{:year 2010, :make "Honda", :model "Civic"}
(Car. 2010 "Honda" nil)
;; -> #:enhanced-record-blog.Car{:year 2010, :make "Honda", :model nil}
(merge (Car. 2010 "Honda" "Civic") {:year 2009 :model "Fit"})
;; -> #:enhanced-record-blog.Car{:year 2009, :make "Honda", :model "Fit"}
(new-rocket-car {:color "Blue" :fuel 100 :name "Zoomer"})
;; -> (new-rocket-car {:name "Zoomer", :fuel 100, :color "Blue"})
(new-rocket-car
(new-rocket-car {:color "Blue" :fuel 100 :name "Zoomer"})
{:color "Red" :name "Flash"})
;; -> (new-rocket-car {:name "Flash", :fuel 100, :color "Red"})
(pprint (new-rocket-car {:color "Blue" :fuel 100 :name "Zoomer"}))
;; -> "(new-rocket-car {:color "Blue", :fuel 100, :name "Zoomer"})\n"