例如,如果一个nil传递到clojure.set/union
或clojure.set/intersection
,输出将取决于位置。我认为这些函数应该始终返回一个哈希集,不管有nil或者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)
之类的函数,可能会引发异常(这正是困扰我的问题)。
也许这不仅仅局限于并集和交集,还有更多的函数存在这种“问题”