0

I following clojure code

(defn reverse-reader [coll]
    (assert (coll? coll) "you can only reverse collections")
    (reverse coll)
)

(def custom-readers {'demo/reverse reverse-reader})

(defn getContent
    [filename myCustomObject]
    (edn/read-string
        {:readers custom-readers}
        (slurp filename))
)

I am passing following EDN file

{
    :a 1
    :b [1 2 3 4 5]
    :c #demo/reverse [5 4 3 2 1]
}

My question is: When I call (getContent "ednfilepath" myCustomObject), reverse-reader gets called with collection defined in EDN... how can I pass myCustomObject from getContent to function reverse-reader ?

Thanks for help in advance.

ppp456878
  • 155
  • 8
  • It's not clear what you're trying to do here , you can call `reverse-reader` within `getContent` with `(reverse-reader myCustomObject)`. Do you want to combine the result with the EDN output in some way? – Lee Nov 29 '19 at 00:47
  • I want myCustomObject to getPassed to reverse-reader when edn-reader calls it... I want to modify reverse-reader to (defn reverse-reader [coll myCustomObject]) – ppp456878 Nov 29 '19 at 01:10

1 Answers1

1

Based on your comment it looks like you want to add a parameter to reverse-reader and create a new function as the tag reader in getContent:

(defn reverse-reader [coll custom]
  ...)

(defn get-custom-readers [custom]
  {'demo/reverse (fn [c] (reverse-reader c custom))})

(defn getContent
    [filename myCustomObject]
    (edn/read-string
        {:readers (get-custom-readers myCustomObject])
        (slurp filename)))
Lee
  • 142,018
  • 20
  • 234
  • 287