- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎两者都可以用于定义您以后可以使用不同数据类型实现的函数。 AFAIK 的主要区别在于 defmulti
用于 map 和defprotocol
在记录上工作。
还有什么区别?使用其中一个有什么好处?
最佳答案
短版:defmulti
更加灵活和通用,而 defprotocol
表现更好。
稍长的版本:defprotocol
支持类型分派(dispatch),类似于大多数主流编程语言中的多态性。defmulti
是一种更通用的机制,您可以在其中调度其他事物,而不仅仅是单一类型。这种灵 active 伴随着性能损失。
More on protocols
More on multimethods
关于clojure - defmulti vs defprotocol?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908065/
语境 考虑下面的一段代码 (defprotocol ICat "Foo" (meow [cat])) (defrecord Cat [a b] "Cat" ICat (meow [cat]
编辑 这个问题没有任何意义,因为我是个白痴并且误读了 Clojure 文档。 我有的: 我有这样的事情: (defprotocol Foo "doc" [foo bar] (Foo-bark [f
似乎两者都可以用于定义您以后可以使用不同数据类型实现的函数。 AFAIK 的主要区别在于 defmulti用于 map 和defprotocol在记录上工作。 还有什么区别?使用其中一个有什么好处?
(defprotocol IAnimal "IAnimal" (report [o] (println (type o) " reporting.\n") (inner-repor
我想在我的类型中有一个带有可选参数的函数。我已经成功地在不属于某个类型的函数中使用了可选参数,但是,我似乎无法让它在协议(protocol)和类型中工作。 我失败的尝试: Clojure 1.4.0
是否可以转换以下代码,使其使用 defprotocol 和 defrecord 而不是 defmulti 和 defmethod ? (defmulti test-multimethod (fn [k
据我所知,如果我想定义一个只能由一个 defprotocol 实现的协议(protocol)( defrecord ) ,我还是要先定义协议(protocol),再定义defrecord实现它: (d
是否可以在 Emacs 中自动完成 defprotocol 方法? 一个例子: (defprotocol Foo (bar [this]) (baz [this]) (deftype Qux
我正在学习 Clojure 中的协议(protocol),并且在以下代码中遇到了此错误: CompilerException java.lang.IllegalArgumentException:没有
除了缺乏文档之外,Clojure 中的 definterface 和 defprotocol 之间还有什么区别? 最佳答案 根据Clojure 的乐趣: The advantages of using
如何写 defprotocol (和 defrecord 来实现它)声明一个与现有函数同名的方法,并动态分派(dispatch)给协议(protocol)/记录的方法,前提是我用协议(protocol
在我的 Clojure 代码库中,我定义了几个协议(protocol)和几个 defrecord。我正在使用 clojure.test 对我的 defrecord 中定义的具体函数进行单元测试。 例如
下面在 Clojure 中使用 defprotocol 和 defrecord 的剩余参数有什么问题? (defprotocol prot (f [this] [this & rest])) (d
我是一名优秀的程序员,十分优秀!