代码之家  ›  专栏  ›  技术社区  ›  Rob Lachlan

为什么没有偷看!Clojure瞬态向量的函数?

  •  10
  • Rob Lachlan  · 技术社区  · 14 年前

    Clojure对其一些持久的数据结构、向量、映射和集合有短暂的类似。对于向量,有 pop! conj! 功能,类似于 pop conj 对于持久向量,但不是 peek! .

    是否有技术原因使 偷看! 不可能的?或者,在大多数使用案例中,对于瞬态向量来说,这是不必要的吗?我总能做到

    (defn peek! [tvec] (get tvec (dec (count tvec))))
    

    但奇怪的是,没有内置的解决方案。

    1 回复  |  直到 9 年前
        1
  •  5
  •   Michał Marczyk    14 年前

    这确实是一个设计问题,最好是针对小组的,但fwiw,我确实调查过 peek / peek! 不久前提供 偷看! 似乎只是创造一个新的 clojure.lang.ITransientStack 并行接口 clojure.lang.IPersistentStack 并由瞬态矢量实现。

    我的猜测是,如果这样一个接口还不可用(并被瞬变所使用),那么它可能是一个优先事项。一个单线程快速堆栈实现已经在Clojure中以 java.util.Stack 因此,我们不会错过这里的许多特性;当clojure中的clojure取得进展时,可能会带来句法上的便利和到持久向量的平滑转换。

    如果投入的努力很高,对CuljEube的Java端的改进是有意义的,即使最终目标是放弃Java代码库的相关部分,并用Culjure中的一个实现来替换它。在预期回报较低的地方,等待协议更广泛地使用可能更有意义。目前可用于处理瞬变的功能集足以满足Clojure自己的需要,我不确定是否有人要求 偷看! 至于clojure,我记得一个相关的对话,所以回报率可能很低……不过,你可以发起草根运动来改变这一点。-)