- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
语境
考虑下面的一段代码
(defprotocol ICat "Foo"
(meow [cat]))
(defrecord Cat [a b] "Cat"
ICat
(meow [cat] (some-expensive-operation a b)))
(->Cat a b)
[1] (let [x (->Cat a b)]
[2] (meow x)
[3] (meow x)
[4] (meow x))
最佳答案
我建议包装逻辑以在构造函数中调用一次昂贵的操作,并将结果作为常规值存储在记录中:
(defprotocol ICat "Foo"
(meow [cat]))
(defrecord Cat [a b] "Cat"
ICat
(meow [cat] (:meow cat)))
(defn make-cat [a b]
(assoc (->Cat a b) :meow (some-expensive-operation a b)))
关于Clojure: defRecord, defProtocol: 只做一次昂贵的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777908/
语境 考虑下面的一段代码 (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
我是一名优秀的程序员,十分优秀!