2010-07-12 15 views
8

necesito un consejo muy básico sobre cómo definir una función de trabajo -main en IntelliJ lo largo de las líneas de:Clojure -main en IntelliJ

(ns clojure.examples.hello 
    (:gen-class)) 

(defn -main 
    [greetee] 
    (println (str "Hello " greetee "!"))) 

Cuando creo un proyecto, pegue el código anterior en un archivo de origen, y establecer la configuración de ejecución (con la ruta de script, módulo, desarrollo de trabajo y "Ejecutar script en REPL" seleccionado), recibo :java.lang.Exception: Unable to resolve symbol: -main in this context (NO_SOURCE_FILE:1)" cada vez que ejecuto (-main "Some Greeting"). Cualquier consejo sería útil.

+0

webdestroya: ¡Gracias por hacer esto realmente legible! – Marc

Respuesta

5

Creo que la REPL de La Clojure comienza en el espacio de nombres user (como la mayoría de las cosas, ¿Clojure REPL?); Tendrá que cambiar al espacio de nombres de su proyecto con (in-ns 'clojure.examples.hello) o (use 'clojure.examples.hello) para llamar a funciones definidas allí. Mejor aún, (require '[clojure.examples.hello :as hello]) y llámelos como (hello/-main "IDEA").

+0

Parece que es un problema de espacio de nombres y usar (in-ns 'clojure.examples.hello) en el comando REPL me pone en el espacio de nombres adecuado. IntelliJ se ahoga en los otros comandos. ¿Alguna manera de hacer esto más perfecto? – Marc

+0

No hay una manera "más transparente". Si desea usar el código en un espacio de nombre particular, necesita estar en ese espacio de nombres o usar ese espacio de nombres. Usualmente uso el espacio de nombres para emular más de cerca cómo sería usar esa biblioteca en otra biblioteca. –

+0

Se encuentra de manera más transparente al usar Eclipse para Java y Counterclockwise. Dejar caer IJ e ir con E. – Marc