summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeikel Brandmeyer <mb@kotka.de>2010-05-27 18:49:42 +0200
committerStuart Halloway <stu@thinkrelevance.com>2010-06-03 21:20:47 -0400
commit7bf68461de66ef2d204487e345b2af18418ea581 (patch)
tree54b0970c21fb78e23a800831bec7cf3122f2e111
parentfb52b69d75868e4ce49d0123bc1ceaae8d6f5fe8 (diff)
Make disj nil-aware
Refers #360 Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/clj/clojure/core.clj12
-rw-r--r--test/clojure/test_clojure/data_structures.clj4
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) #{}