【发布时间】:2012-11-18 04:47:35
【问题描述】:
(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.
不幸的是,这不会发生,因为上面的代码无法编译。实现“这个”的最佳方式是什么?
这里所说的“this”是指我有一些想要成为协议一部分的功能,我想要对所有记录都有一个实现,并且我希望这个功能能够访问记录的专用功能实施。
(clojure 的做法是什么?)
【问题讨论】:
-
使用
protocols的任何具体原因,因为这可以像编写函数一样简单 -
我正在 Clojure 中实现这个绘图库(以 SVG 显示)。对于我要绘制的每个元素(defrecord),都会弹出样板代码,我更愿意将其粘贴在某个地方(defprotocol 似乎是最小公倍数)
标签: clojure