A brief example of protocols and records in Clojure
reference: http://bit.ly/2HffFcv
A brief example of protocols and records in Clojure
reference: http://bit.ly/2HffFcv
| ;; 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")) |