Clojure的一些持久性数据结构,向量,映射和集合具有瞬态类似物。对于向量,有pop!
和conj!
函数,类似于持久向量的pop
和conj
,但没有peek!
。
是否存在使peek!
无法有效实施的技术原因?或者在瞬态向量的大多数用例中它是不是必需的?我总能做到
(defn peek! [tvec] (get tvec (dec (count tvec))))
但似乎很奇怪,没有内置的解决方案。
答案 0 :(得分:5)
这真是一个最适合ggroup的设计问题,但是FWIW,我之前调查了peek
/ peek!
,提供peek!
似乎只是创建一个简单的问题并行clojure.lang.ITransientStack
的新clojure.lang.IPersistentStack
接口,并有瞬态向量实现它。
我的猜测是,如果这样的接口尚未可用(并由瞬态使用),则可能是优先级问题。 Clojure中已经以java.util.Stack
的形式提供了单线程快速堆栈实现,因此我们不会错过这里的许多功能;句法方便和顺利转换为持久性向量可能会在Clojure-in-Clojure上取得进展。
(投入的努力回报很高,即使最终目标是最终放弃Java代码库的相关部分并将其替换为Clojure中的实现,对Clojure的Java方面的改进也是有意义的。返回值较低,等待协议更普遍地使用可能更有意义等。当前可用的处理瞬态的函数集足以满足Clojure自身的需求而且我不确定是否曾经调用{{1}在ggroup上 - 至于#clojure,我记得一个相关的对话 - 所以回报可能被判断为低......你可以开始草根运动来改变它。: - ))