为啥没有窥视! clojure 瞬态向量的函数?
Posted
技术标签:
【中文标题】为啥没有窥视! clojure 瞬态向量的函数?【英文标题】:Why is there no peek! function for clojure transient vectors?为什么没有窥视! clojure 瞬态向量的函数? 【发布时间】:2011-03-13 13:07:08 【问题描述】:Clojure 的一些持久性数据结构、向量、映射和集合具有瞬态类似物。对于向量,有pop!
和conj!
函数,类似于用于持久向量的pop
和conj
,但没有peek!
。
是否存在使peek!
无法有效实现的技术原因?还是在大多数用例中都不需要瞬态向量?我总能做到
(defn peek! [tvec] (get tvec (dec (count tvec))))
但没有内置解决方案似乎很奇怪。
【问题讨论】:
【参考方案1】:这确实是一个最好针对 ggroup 的设计问题,但是 FWIW,我不久前确实调查了 peek
/ peek!
并提供 peek!
似乎是创建一个新的 clojure.lang.ITransientStack
接口的简单问题并行clojure.lang.IPersistentStack
并使用瞬态向量实现它。
我的猜测是,如果这样的接口尚不可用(并且由瞬态使用),则可能是优先级问题。 Clojure 中已经可以使用java.util.Stack
形式的单线程快速堆栈实现,因此我们不会错过这里的许多功能;随着 Clojure-in-Clojure 取得进展,语法便利和向持久向量的平滑转换可能会出现。
(如果投入的努力回报很高,那么对 Clojure 的 Java 方面的改进是有意义的,即使最终目标是删除 Java 代码库的相关部分并用 Clojure 中的实现替换它。在预期的地方回报较低,等待协议被更普遍地使用可能更有意义等。当前可用的一组用于处理瞬态的函数足以满足 Clojure 自己的需求,我不确定是否曾经调用过peek!
on ggroup——至于#clojure,我记得有一次相关的对话——所以回报率可能被认为很低……不过,你可以发起一场草根运动来改变这一点。:-))
【讨论】:
非常感谢,这对您有帮助。我并不急需偷看!功能,但如果情况发生变化,我可能会考虑开始草根运动。现在我不想打扰我们明智的 BDFL 或他的副手。以上是关于为啥没有窥视! clojure 瞬态向量的函数?的主要内容,如果未能解决你的问题,请参考以下文章