Install

On va au plus simple, on oublie leiningen, boot au java -cp ….

On install les clojure tools https://clojure.org/guides/getting_started

curl -O https://download.clojure.org/install/linux-install-1.10.0.442.sh
chmod +x linux-install-1.10.0.442.sh
sudo ./linux-install-1.10.0.442.sh

(Répeter l’operation avec les nouveaux liens pour une upgrade)

Tout marche ?

clj --help

Usage: clojure [dep-opt*] [init-opt*] [main-opt] [arg*]
       clj     [dep-opt*] [init-opt*] [main-opt] [arg*]

Le fichier

;cat hello.clj

(ns simplest.clojure.code
  (:gen-class))

(defn hello-world []
  (println "Hello World"))

(hello-world)

Run

clj hello.clj
Hello World

Merci au revoir….

Better

Ça fonctionne. Mais on peut faire mieux.

Je déteste ces fichiers de code qui se lance juste parce qu’on les ‘charges’. Je veux que tout soit fonction.

;cat hello.clj

(ns simplest.clojure.code
  (:gen-class))

(defn hello-world []
  (println "Hello World"))

(defn -main [& args]
  (hello-world))

Il ne se passe rien :

clj hello.clj

Normal, rien n’oblige à lancer la fonction -main. Il faut l’appeler de cette facon :

clj --init hello.clj --main simplest.clojure.code
Hello World
  • -i: l’input
  • –main “Call the -main function from namespace” Donc il faut lui passer le namespace

C’est beaucoup mieux. Maiiiiiiiis contraignant.

On peut définir le tout avec un project.clj, mais la on sort du cadre du ‘simplest clojure’.