如果一个nil到达,例如clojure.set/union
或clojure.set/intersection
,则输出取决于位置。我认为这些函数应该始终返回一个散列集合,不论nil
还是位置。
$ clj
Clojure 1.10.3
user=> (require '[clojure.set :refer [intersection union]])
nil
user=> (union #{} nil)
#{}
user=> (union nil #{})
nil
user=> (intersection #{} nil)
#{}
user=> (intersection nil #{})
nil
user=> (union #{} nil nil)
nil
user=> (union nil #{} nil)
nil
user=> (union nil nil #{})
#{}
user=> (intersection #{} nil nil)
nil
user=> (intersection nil #{} nil)
nil
user=> (intersection nil nil #{})
#{}
在我看来,参数的顺序不应该重要,且始终应该是一个集合,只是假定nil
为空集。另外,如果后来打算调用(set-of-things thing)
,可能会抛出异常(这正是让我受伤的地方)。
也许这不仅仅局限于并集和交集,还有更多的函数存在这样的“问题”。