clojure - 使用 dissoc 的一元版本?

标签 clojure arity

在使用dissoc时,我注意到它有一个一元版本,似乎没有做任何事情。我检查了来源,结果发现这只是恒等函数:

(defn dissoc
  ([map] map)
  ([map key]
   (. clojure.lang.RT (dissoc map key)))
  ([map key & ks]
   (let [ret (dissoc map key)]
     (if ks
       (recur ret (first ks) (next ks))
       ret))))

然后我注意到 disj 也有一个具有相同定义的一元版本。

一元版本的目的是什么?我能看到的唯一潜在用途可能是当它们与 apply 一起使用时,但我不知道这有什么用处。为什么它们的 conjassoc 对应项没有类似的一元版本?

最佳答案

考虑(应用 dissoc some-map items-to-remove)

如果一元形式不存在,items-to-remove 为空将是一个错误,因此在进行此调用之前需要始终检查其长度。

关于clojure - 使用 dissoc 的一元版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44210816/

相关文章:

java - 初始化 Java 对象的 Clojure 惯用方法

clojure - 多个参数的 `some-fn` 变体

clojure - 在 Clojure 中按多个键分组

java - 在 ClassLoader 上调用 `defineClass` 会导致 "No matching method found"

c++如何获得构造函数的数量?

clojure - 在 clojure 中覆盖代理中的多元方法

clojure - 有没有像 Heroku 这样的东西可以部署 Clojure 风格的 Web 应用程序?

javascript - `eval` 是在 JavaScript 中创建具有动态确定数量的函数的唯一方法吗?

clojurescript - 函数的数量

java - 可变参数中的元素数量