diff options
author | Meikel Brandmeyer <mb@kotka.de> | 2010-05-27 18:49:42 +0200 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-06-03 21:20:47 -0400 |
commit | 7bf68461de66ef2d204487e345b2af18418ea581 (patch) | |
tree | 54b0970c21fb78e23a800831bec7cf3122f2e111 | |
parent | fb52b69d75868e4ce49d0123bc1ceaae8d6f5fe8 (diff) |
Make disj nil-aware
Refers #360
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-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) #{} |