oops, sorry for the argument declaration. Concerning the need to have (:main true), it's weird, because it worked for me without it.
2009/3/15 Tom Faulhaber <tomfaulha...@gmail.com> > > A couple of small corrections: > > the :gen-class directive needs (:main true) to tell it you have a main > function: > > (ns temp-converter > (:gen-class (:main true)) > > and the main function needs an argument declaration: > > (defn -main [] (main)) > > Tom > > On Mar 15, 2:05 am, Laurent PETIT <laurent.pe...@gmail.com> wrote: > > Hello, > > > > And one more added benefit is that if you (or something using your > > namespace) uses IDEs that auto-load (or auto-compile) the clj files each > > time they are saved (such as clojuredev does), it would be impractical to > > have a namespace auto-execute itself. Because then, the auto-load > > functionality is bloated (counter performant, potentially blocking > > everything, etc.) > > > > Note that if you want a solution that can auto-execute when run > standalone > > but not auto-execute when just loaded, you can generate from your main > > namespace a class with a static main method : > > > > add a :gen-class directive in the ns declaration : > > > > (ns temp-converter > > (:gen-class) > > (:import (java.awt BorderLayout Event GridLayout Toolkit) > > (java.awt.event KeyEvent) > > (javax.swing AbstractAction Action BorderFactory > > JFrame JPanel JButton JMenu JMenuBar JTextField JLabel > > KeyStroke) > > (javax.swing.event DocumentListener))) > > > > create a -main method that will be automatically recognised as the static > > public void main(String[] args) classic java application start method : > > > > (defn -main (main)) > > > > suppress the explicit call to (main), or guard it by tests to see if the > ns > > is loaded via compilation: > > (when-not *compiling* (main))... > > > > HTH, > > > > -- > > Laurent > > > > 2009/3/15 Timothy Pratley <timothyprat...@gmail.com> > > > > > > > > > Hi Keith, > > > > > IMO it is slightly better to use a function as you described. The > > > benefit being that it makes it easier to test your helper functions > > > without running the main application. For instance if you comment out > > > (main) and load the file to the REPL or call a test function instead. > > > It seems the defacto standard on clj files I've seen is to provide an > > > application function commented out at the bottom of the file. > > > > > What might be nice is to have a check for 'included' or 'loaded' vs > > > 'executed'. This can almost be done by looking at *command-line-args*, > > > however not quite because the standard launcher does not include $0. > > > So you have to use a non-standard launcher which includes $0 to > > > achieve this: > > > (when *command-line-args* > > > (main *command-line-args*)) > > > > > There is discussion about this previously: > > > > >http://groups.google.com/group/clojure/browse_thread/thread/9ec09e782. > .. > > > > >http://groups.google.com/group/clojure/browse_thread/thread/ca60d98fb. > .. > > > > > Regards, > > > Tim. > > > > > On Mar 15, 12:55 pm, Keith Bennett <keithrbenn...@gmail.com> wrote: > > > > Is it a good idea or a bad idea to provide a main() function as the > > > > program's entry point? > > > > > > As an example, I have a program athttp://is.gd/ndTV. If you look at > > > > the bottom you'll see (unless and until I change it) the > specification > > > > of a main function, and then a call to it. I'm aware that I could > > > > just list the contents of main() outside any function, and it would > > > > work the same way. > > > > > > So which approach is better, and why? > > > > > > Thanks, > > > > Keith > > > --~--~---------~--~----~------------~-------~--~----~ 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 clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---