Skip to content

Commit 81cdc2d

Browse files
committed
allows kw/map/set invocations with default value
1 parent da5e88d commit 81cdc2d

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
@@ -1061,17 +1061,22 @@ If further arguments are passed, invokes the method named by symbol, passing the
10611061

10621062
(extend -repr Symbol -str)
10631063

1064-
(extend -invoke Keyword (fn [k m] (-val-at m k nil)))
1065-
(extend -invoke PersistentHashMap (fn [m k] (-val-at m k nil)))
1066-
(extend -invoke PersistentHashSet (fn [m k] (-val-at m k nil)))
1067-
10681064
(defn get
10691065
{:doc "Get an element from a collection implementing ILookup, return nil or the default value if not found."
10701066
:added "0.1"}
10711067
([mp k]
10721068
(get mp k nil))
10731069
([mp k not-found]
1074-
(-val-at mp k not-found)))
1070+
(-val-at mp k not-found)))
1071+
1072+
(extend -invoke Keyword (fn
1073+
([k m not-found]
1074+
(-val-at m k not-found))
1075+
([k m]
1076+
(-val-at m k nil))))
1077+
(extend -invoke PersistentHashMap get)
1078+
(extend -invoke PersistentHashSet get)
1079+
10751080

10761081
(defn get-in
10771082
{: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)