Hey,
I have this multi-method setup:
(defmulti dsl-walk :Rule)
(defmulti component-constructor :Component)
(defmethod dsl-walk :SymbolPlus [r]
(let [children (map dsl-walk (:recurrent r))]
(apply component-constructor (list {:Component (keyword (:symbol
r)) :children children}))))
(defmethod dsl-walk :KeywordAnyPlus [r]
(apply component-constructor (list {:Component (apply (:resolver r)
(list (:keyword r))) :name (:keyword r) :values (:any-section r)})))
(defmethod dsl-walk :KeywordArgsPlus [r]
(apply component-constructor (list {:Component (apply (:resolver r)
(list (:keyword r))) :name (:keyword r) :args (:args-section r)})))
For the :KeywordAnyPlus and :KeywordArgsPlus method defs I need to
provide a "resolver" function. My concern is how to pass in this
function without leaking implementation details onto the callers the
multi-method?
For now I've added the function to the data structure that I pass to
the dsl-walk methods using postwalk. I find this too crude.
I've tried using declare to add a namespace-local function and then
have that function assigned by the functions that use dsl-walk but
haven't found a way to assign a value to a declared var from another
namespace.
I can't add a second argument to the dsl-walk methods since dsl-walk
is being called recursively on a data structure.
What's the best approach to pass in a function from a calling
namespace without leaking implementation details?
Thanks
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en