From 91bccfa55f7dab4a0ccf0a7a25a56898e0d01411 Mon Sep 17 00:00:00 2001 From: Matthew Davidson Date: Wed, 4 Jan 2023 17:07:13 +0100 Subject: [PATCH] 23 --- src/koans/23_meta.clj | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/koans/23_meta.clj b/src/koans/23_meta.clj index 3767788..4762531 100644 --- a/src/koans/23_meta.clj +++ b/src/koans/23_meta.clj @@ -7,13 +7,13 @@ (meditations "Some objects can be tagged using the with-meta function" - (= __ (meta giants)) + (= {:league "National League"} (meta giants)) "Or more succinctly with a reader macro" - (= __ (meta '^{:division "West"} Giants)) + (= {:division "West"} (meta '^{:division "West"} Giants)) "While others can't" - (= __ (try + (= "This doesn't implement the IObj interface" (try (with-meta 2 {:prime true}) @@ -21,31 +21,31 @@ "This doesn't implement the IObj interface"))) "Notice when metadata carries over" - (= __ (meta (merge '^{:foo :bar} {:a 1 :b 2} + (= {:foo :bar} (meta (merge '^{:foo :bar} {:a 1 :b 2} {:b 3 :c 4}))) "And when it doesn't" - (= __ (meta (merge {:a 1 :b 2} + (= nil (meta (merge {:a 1 :b 2} '^{:foo :bar} {:b 3 :c 4}))) "Metadata can be used as a type hint to avoid reflection during runtime" - (= __ (#(.charAt ^String % 0) "Cast me")) + (= \C (#(.charAt ^String % 0) "Cast me")) "You can directly update an object's metadata" (= 8 (let [giants (with-meta 'Giants {:world-series-titles (atom 7)})] - (swap! (:world-series-titles (meta giants)) __) + (swap! (:world-series-titles (meta giants)) inc) @(:world-series-titles (meta giants)))) "You can also create a new object from another object with metadata" (= {:league "National League" :park "Oracle Park"} (meta (vary-meta giants - assoc __ __))) + assoc :league "National League" :park "Oracle Park"))) "But it won't affect behavior like equality" - (= __ (vary-meta giants dissoc :league)) + (= giants (vary-meta giants dissoc :league)) "Or the object's printed representation" - (= __ (pr-str (vary-meta giants dissoc :league)))) + (= "Giants" (pr-str (vary-meta giants dissoc :league))))