Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save BadUncleX/3bcf0f1af9dad26d9ea6ee688d456f08 to your computer and use it in GitHub Desktop.
Save BadUncleX/3bcf0f1af9dad26d9ea6ee688d456f08 to your computer and use it in GitHub Desktop.
A brief example of protocols and records in Clojure clj
;; A protocol with a single method
(defprotocol Waggable
(wag [x]))
;; A record that implements that protocol
(defrecord Dog [name]
Waggable
(wag [x]
(prn (str (:name x)
" wagged their tail"))))
;; Call that method
(wag (->Dog "Derek"))
;; A record that doesn't implement the protocol
(defrecord Cat [name])
;; Extended to implement the protocol
(extend-protocol Waggable
Cat
(wag [x]
(prn "Cats don't wag")))
;; And then call that method
(wag (->Cat "Arnold"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment