0
如果您尝试运行以下代码,您会看到它将编译,但在倒数第二行的运行时由于“No protocol method NameSayer.say-为cljs.core/PersistentArrayMap类型定义的名称:{}“尽管它满足?调用返回true。 IVector/PersistentVector案件也会发生类似的失败,尽管也满足所需的协议。如何将协议扩展到ClojureScript集合一般
(defprotocol NameSayer
(say-name [input]))
(extend-protocol NameSayer
number
(say-name [_]
"I'm a number!")
string
(say-name [_]
"I'm a string!")
IMap
(say-name [_]
"I'm a map!")
IVector
(say-name [_]
"I'm a vector!"))
(println (satisfies? IMap {}))
(println (satisfies? IVector []))
(println (say-name "hello"))
(println (say-name 100))
(println (say-name {}]))
(println (say-name []))
我clojurescript.core窥探四周,看见这样的事情IPrintWithWriter,为PersistentArrayMap,PersistentHashMap和PersistentTreeMap实现简单,尽管所有具有公共IMAP接口复制。有没有更好的方法来解决这个问题比使用协议的代码重复?