如预期工作的示例
`
Clojure 1.7.0-master-SNAPSHOT
用户=> (dissoc {})
{}
用户=> (disj #{})
{}
用户=> (conj {})
{}
用户=> (conj [])
[]
`
没有按预期工作,但经过提议的补丁已更改的示例
`
用户=> (assoc {})
ArityException 传递给:core/assoc 的参数数量错误(1)clojure.lang.AFn.throwArity (AFn.java:429)
用户=> (assoc! (transient {}))
ArityException 传递给:core/assoc! 的参数数量错误(1)clojure.lang.AFn.throwArity (AFn.java:429)
用户=> (dissoc! (transient {}))
ArityException 传递给:core/dissoc! 的参数数量错误(1)clojure.lang.AFn.throwArity (AFn.java:429)
;; patch enables conj! with multiple arguments, like conj
用户=> (conj! (transient []) 1 2 3)
ArityException 传递给:core/conj! 的参数数量错误(4)clojure.lang.AFn.throwArity (AFn.java:429)
;; patch would give error for missing value for last key to assoc!, not silently use nil for last value
用户=> (assoc! (transient {}) 1 2 3)
object[clojure.lang.PersistentArrayMap$TransientArrayMap 0x2e7569b8 "clojure.lang.PersistentArrayMap$TransientArrayMap@2e7569b8"]
`
我查看了代码的其余部分,寻找类似的案例,并发现它们在处理不同数量的参数方面存在一些差异,例如
- conj 可以处理任意数量的参数,但 conj! 不能。
- assoc 检查是否有未指定值的最终键(CLJ-1052),而 assoc! 则没有。
历史/讨论:Clojure Google 群组中关于 conj 在仅接受一个集合作为参数时出现问题,而 disj 则可以处理该情况的讨论
https://groups.google.com/forum/?fromgroups=#!topic/clojure/Z9mFxsTYTqQ
筛选:Alex Miller