Skip to content

Commit 730cd71

Browse files
committed
Merge pull request #416 from mpenet/feature/ilookup-not-found-key
allows kw/map/set invocations with default value
2 parents 9f02657 + 81cdc2d commit 730cd71

4 files changed

Lines changed: 18 additions & 9 deletions

File tree

pixie/stdlib.pxi

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,17 +1028,22 @@ If further arguments are passed, invokes the method named by symbol, passing the
10281028

10291029
(extend -repr Symbol -str)
10301030

1031-
(extend -invoke Keyword (fn [k m] (-val-at m k nil)))
1032-
(extend -invoke PersistentHashMap (fn [m k] (-val-at m k nil)))
1033-
(extend -invoke PersistentHashSet (fn [m k] (-val-at m k nil)))
1034-
10351031
(defn get
10361032
{:doc "Get an element from a collection implementing ILookup, return nil or the default value if not found."
10371033
:added "0.1"}
10381034
([mp k]
10391035
(get mp k nil))
10401036
([mp k not-found]
1041-
(-val-at mp k not-found)))
1037+
(-val-at mp k not-found)))
1038+
1039+
(extend -invoke Keyword (fn
1040+
([k m not-found]
1041+
(-val-at m k not-found))
1042+
([k m]
1043+
(-val-at m k nil))))
1044+
(extend -invoke PersistentHashMap get)
1045+
(extend -invoke PersistentHashSet get)
1046+
10421047

10431048
(defn get-in
10441049
{:doc "Get a value from a nested collection at the \"path\" given by the keys."

tests/pixie/tests/collections/test-maps.pxi

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,15 @@
2525
(t/assert= (-eq m {:a 1, :b 2, :c 4}) false)
2626
(t/assert= (-eq m {:a 3, :b 2, :c 1}) false)))
2727

28-
2928
(t/deftest map-val-at-and-invoke
3029
(let [m {:a 1, :b 2, :c 3}]
3130
(foreach [e m]
3231
(t/assert= (get m (key e)) (val e))
3332
(t/assert= (m (key e)) (val e)))
3433
(t/assert= (get m :d) nil)
35-
(t/assert= (m :d) nil)))
34+
(t/assert= (m :d) nil)
35+
(t/assert= (m :d :foo) :foo)
36+
(t/assert= (:d m :foo) :foo)))
3637

3738
(t/deftest map-without
3839
(let [m {:a 1 :b 2}]

tests/pixie/tests/collections/test-sets.pxi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858
(t/assert= (s 3) 3)
5959

6060
(t/assert= (s -1) nil)
61-
(t/assert= (s 4) nil)))
61+
(t/assert= (s 4) nil)
62+
(t/assert= (s :d :foo) :foo)
63+
(t/assert= (:d s :foo) :foo)))
6264

6365
(t/deftest test-has-meta
6466
(let [m {:has-meta true}

tests/pixie/tests/test-keywords.pxi

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
(t/assert= (:b m) 2)
88
(t/assert= (:c m) 3)
99

10-
(t/assert= (:d m) nil)))
10+
(t/assert= (:d m) nil)
11+
(t/assert= (:d m :foo) :foo)))
1112

1213
(t/deftest keyword-namespace
1314
(t/assert= (namespace :foo/bar) "foo")

0 commit comments

Comments
 (0)