作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是looking at clojure.core 函数重新分组:
(defn re-groups [^java.util.regex.Matcher m]
(let [gc (. m (groupCount))]
(if (zero? gc)
(. m (group))
(loop [ret [] c 0]
(if (<= c gc)
(recur (conj ret (. m (group c))) (inc c))
ret)))))
(defmulti re-groups (fn [^java.util.regex.Matcher m] (.groupCount m)))
(defmethod re-groups 0 [m] (.group m))
(defmethod re-groups :default [m]
(let [idxs (range (inc (.groupCount m)))]
(reduce #(conj %1 (.group m %2)) [] idxs)))
clojure.core: "Elapsed time: 668.029589 msecs"
multi-method: "Elapsed time: 2632.672379 msecs"
最佳答案
Clojure 多方法允许基于任意调度函数的运行时多态行为。这对于构建临时层次结构和抽象非常强大,但是您为这种灵 active 付出了性能损失。您可能希望使用协议(protocol)重新实现您的解决方案。只有在需要完全的运行时类型灵 active 时才使用多方法。
关于performance - clojure 多方法天生慢吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7260797/
我是一名优秀的程序员,十分优秀!