Hello, I have an app which specifies a protocol and a record name. At runtime, it searches the classpath for files implementing the specification and creates a map of namespace to instance for each. Before I implemented the protocol, I just specified function names. I was able to lookup the function names and call them. After I switched to using a protocol, I get a CompilerException.
Here's the question: How do I instantiate a known record from an unknown namespace? Here is the sample code. Thanks for you help. ```clojure (ns proto) (defprotocol Proto (meth [this])) ;; use clojure.tools.namespace.find to locate the namespace. ;; for simplicity, we just def it here. (def that 'rec) (require that) ;; the symbol "Rec" is part of the specification (let [inst (ns-resolve that (symbol "Rec"))] (when (class? inst) (println "inst:" (type inst) inst) ;; => java.lang.Class rec.Rec (println "meth:" (meth (new rec.Rec))) ;; => it works when I know it. ;; uncomment this for a CompilerException ;;(println "meth:" (meth (new inst))) ;; => CompilerException java.lang.IllegalArgumentException: ;; Unable to resolve classname: inst, compiling:(proto.clj:21:28) )) ``` ```clojure (ns rec (:require proto)) (defrecord Rec [] proto.Proto (meth [this] "it works when I know it")) ``` -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.