在clojure,
(assoc {})
引发Arity异常,但是
(dissoc {})
才不是。为什么?我本来希望它们两个都抛出异常,或者在没有提供键或值的情况下两者都不做任何更改。
编辑:我看到允许使用这些格式的基本原理;这意味着我们可以将assoc或dissoc应用于可能为空的参数列表。我只是不明白为什么一个人被允许而另一个人不被允许,我很好奇我是否缺少这样做的充分理由。
最佳答案
我个人认为缺少1-arity assoc是一个疏忽:每当期望尾随参数列表(& stuff
)时,该函数通常应能够使用零参数,以便可以将apply
编码为空列表。
Clojure还有许多其他功能可以在零参数的情况下正常工作,例如+
和merge
。
另一方面,Clojure还有其他不接受零尾随参数的函数,例如conj
。
因此,Clojure API在这方面有点不一致.....
关于clojure - 在Clojure中,为什么assoc除了需要map以外还需要参数,而dissoc不需要呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16174949/