adding runtime polymorphism
This commit is contained in:
parent
5aad06bf05
commit
681a8d98ed
35
koans/about_runtime_polymorphism.clj
Normal file
35
koans/about_runtime_polymorphism.clj
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
(defn hello
|
||||||
|
([] "Hello World!")
|
||||||
|
([a] (str "Hello, you silly " a "."))
|
||||||
|
([a & more] (str "Hello to this group: "
|
||||||
|
(apply str
|
||||||
|
(interpose ", " (concat (list a) more)))
|
||||||
|
"!")))
|
||||||
|
|
||||||
|
(defmulti diet (fn [x] (:eater x)))
|
||||||
|
(defmethod diet :herbivore [a] __)
|
||||||
|
(defmethod diet :carnivore [a] __)
|
||||||
|
(defmethod diet :default [a] __)
|
||||||
|
|
||||||
|
(meditations
|
||||||
|
"Some functions can be used in different ways - with no arguments"
|
||||||
|
(= __ (hello))
|
||||||
|
|
||||||
|
"With one argument"
|
||||||
|
(= __ (hello "world"))
|
||||||
|
|
||||||
|
"Or with many arguments"
|
||||||
|
(= __
|
||||||
|
(hello "Peter" "Paul" "Mary"))
|
||||||
|
|
||||||
|
"Multimethods allow more complex dispatching"
|
||||||
|
(= "Bambi eats veggies."
|
||||||
|
(diet {:species "deer" :name "Bambi" :age 1 :eater :herbivore}))
|
||||||
|
|
||||||
|
"Different methods are used depending on the dispatch function result"
|
||||||
|
(= "Simba eats animals."
|
||||||
|
(diet {:species "lion" :name "Simba" :age 1 :eater :carnivore}))
|
||||||
|
|
||||||
|
"You may use a default method when no others match"
|
||||||
|
(= "I don't know what Rich Hickey eats."
|
||||||
|
(diet {:name "Rich Hickey"})))
|
@ -19,4 +19,5 @@
|
|||||||
(load "about_functions")
|
(load "about_functions")
|
||||||
(load "about_conditionals")
|
(load "about_conditionals")
|
||||||
(load "about_higher_order_functions")
|
(load "about_higher_order_functions")
|
||||||
|
(load "about_runtime_polymorphism")
|
||||||
(println "You have acheived clojure enlightenment. Namaste.")
|
(println "You have acheived clojure enlightenment. Namaste.")
|
||||||
|
Loading…
Reference in New Issue
Block a user