Hello. I tried to write small utility for importing java code. Because sometimes I want to just copy and paste very long java import code and hope it work in clojure rather than converting it to clojure style.
Functions and macros work as I expected. But if I try to apply '- >:import' in ns statement: ;;slime (use 'easy-import) (ns test (->:import "import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient")) ----------------- java.lang.Exception: No such var: clojure/->:import (NO_SOURCE_FILE:1) [Thrown class clojure.lang.Compiler$CompilerException] ;;Test (java-import-code->lst "import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient") => '((org.apache.http HttpVersion) (org.apache.http.client HttpClient)) (macroexpand-1 '(->:import "import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient")) => (:import (org.apache.http HttpVersion) (org.apache.http.client HttpClient)) (macroexpand-1 '(->import "import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient")) => (import '(org.apache.http HttpVersion) '(org.apache.http.client HttpClient)) How can I fix this? I paste my code. ;;code (ns easy-import (:use clojure.contrib.str-utils)) (defn java-import-code->lst {:doc "converts java import code to a list for clojure import code. For example (java-import-code->lst \"import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient\") => '((org.apache.http HttpVersion) (org.apache.http.client HttpClient))"} [#^String code] (let [parsed-code (map re-split (repeat #"\.") (re-split #";" (re-gsub #"\n+|\s+|import" "" code))) packages (map str-join "." (map drop-last parsed-code)) classes (map last parsed-code)] (for [p packages c classes] (list (symbol p) (symbol c))))) (defmacro ->:import {:doc "(->:import \"import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient\") expands to (:import (org.apache.http HttpVersion) (org.apache.http.client HttpClient))"} [#^String code] `(:import ~@(java-import-code->lst code))) (defn map-quote {:doc "(map-quote '((a b) (c d))) => '((quote (a b)) (quote (c d)))"} [lst] (for [item lst] (list 'quote item))) (defmacro ->import {:doc "(->import \"import org.apache.http.HttpVersion; import org.apache.http.http.client.HttpClient\") expands to (import '(org.apache.http HttpVersion) '(org.apache.http.client HttpClient))"} [#^String code] `(import ~@(map-quote (java-import-code->lst code)))) --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---