(defprotocol IAnimal "IAnimal"
(report [o]
(println (type o) " reporting.\n")
(inner-report o)
(println (type o) " out.\n")))
(defrecord Dog [] IAnimal
(inner-report [o]
(println "Woof Woof.\n")))
(defrecord Cat [] IAnimal
(inner-report [o]
(println "Meow Meow.\n")))
(defrecord Vampire [] IAnimal
(inner-report [o]
(println "I don't sparkle.\n")))
今、私はそれを出力したいと思います:
Dog reporting.
Woof Woof.
Dog out.
Cat reporting.
Meow Meow.
Cat out.
Vampire reporting.
I don't sparkle.
Vampire out.
残念ながら、上記のコードはコンパイルされないため、これは発生しません。「これ」を達成するための最良の方法は何ですか?
「これ」とは、プロトコルの一部にしたい関数があり、すべてのレコードに対して1つの実装が必要であり、この関数がレコードが実装する特殊な関数にアクセスできるようにすることを意味します。
(これを行うためのclojureの方法は何ですか?)