Came across this code in clojure.tools.logging (defn cl-factory "Returns a Commons Logging-based implementation of the LoggerFactory protocol, or nil if not available." [] (try (Class/forName "org.apache.commons.logging.Log") (eval `(do (extend org.apache.commons.logging.Log Logger {:enabled? (fn [logger# level#] (condp = level# :trace (.isTraceEnabled logger#) :debug (.isDebugEnabled logger#) :info (.isInfoEnabled logger#) :warn (.isWarnEnabled logger#) :error (.isErrorEnabled logger#) :fatal (.isFatalEnabled logger#) (throw (IllegalArgumentException. (str level#))))) :write! (fn [logger# level# e# msg#] (if e# (condp = level# :trace (.trace logger# msg# e#) :debug (.debug logger# msg# e#) :info (.info logger# msg# e#) :warn (.warn logger# msg# e#) :error (.error logger# msg# e#) :fatal (.fatal logger# msg# e#) (throw (IllegalArgumentException. (str level#)))) (condp = level# :trace (.trace logger# msg#) :debug (.debug logger# msg#) :info (.info logger# msg#) :warn (.warn logger# msg#) :error (.error logger# msg#) :fatal (.fatal logger# msg#) (throw (IllegalArgumentException. (str level#))))))}) (reify LoggerFactory (name [_#] "org.apache.commons.logging") (get-logger [_# logger-ns#] (org.apache.commons.logging.LogFactory/getLog (str logger- ns#)))))) (catch Exception e nil)))
I do understand what it does with extend and reify but I am not clear why eval is needed here. -- 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