diff options
-rw-r--r-- | src/clj/clojure/core.clj | 12 | ||||
-rw-r--r-- | test/clojure/test_clojure/data_structures.clj | 4 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 2746a610..81c1fcb7 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -1168,12 +1168,14 @@ {:added "1.0"} ([set] set) ([^clojure.lang.IPersistentSet set key] - (. set (disjoin key))) + (when set + (. set (disjoin key)))) ([set key & ks] - (let [ret (disj set key)] - (if ks - (recur ret (first ks) (next ks)) - ret)))) + (when set + (let [ret (disj set key)] + (if ks + (recur ret (first ks) (next ks)) + ret))))) (defn find "Returns the map entry for key, or nil if key not present." diff --git a/test/clojure/test_clojure/data_structures.clj b/test/clojure/test_clojure/data_structures.clj index 690bde4e..ee4fd41a 100644 --- a/test/clojure/test_clojure/data_structures.clj +++ b/test/clojure/test_clojure/data_structures.clj @@ -728,6 +728,7 @@ ; identity (are [x] (= (disj x) x) + nil #{} #{1 2 3} ; different data types @@ -753,6 +754,9 @@ (sorted-set 1 2) ) (are [x y] (= x y) + (disj nil :a) nil + (disj nil :a :b) nil + (disj #{} :a) #{} (disj #{} :a :b) #{} |