2009-07-22 13 views

risposta

24

Hai alcune opzioni.

Se si tratta solo di un file (non in un pacchetto), quindi nei file, è sufficiente utilizzare load. Se il file è stato nominato “fun.clj”, si sarebbe solo utilizzare il nome del file senza l'estensione:

(load "fun") 

(fornito fun.clj era in classpath). O

(load "files/fun") 

se non era sul classpath, ma nella directory files.

Oppure si potrebbe usare load-file e passare il percorso del file:

(load-file "./files/fun.clj") 

Se si voleva namespace loro (metterli in un pacchetto), allora si sarebbe messo la macro ns all'inizio del tuo file, di nuovo messo sul tuo classpath. Quindi è possibile caricarlo tramite use o require.

Ecco la documentazione per le funzioni che ho descritto:

+0

Mi dispiace ma ho ancora qualche problema. Ho un file chiamato stopwords.clj e Autotag.clj. Voglio importare le parole chiave in Autotag. Quando inserisco (carica "stopwords"), dice "Impossibile trovare stopwords__init.class o stopwords.clj su classpath:" anche se ho stopwords e Autotag nella stessa cartella. Mi dispiace ma sono un principiante completo. Mi aiuti per favore. – unj2

+0

Probabilmente la directory corrente non si trova sul classpath in modo che Clojure non possa "vederlo". Metti stopwords.clj da qualche parte sul tuo classpath (o modifica il tuo classpath per includere "."). – seth

+0

Mi dispiace, non lo so. utente di emacs qui. – seth

1

Questo ha risolto il mio problema e ho esaminato innumerevoli altri problemi qui, quindi vorrei chiarire.

Il modo più semplice in emacs (su Linux) è quello di fare qualcosa di simile:

java -cp "lib/*":. clojure.main -e "(do (require 'swank.swank) (swank.swank/start-repl))" 

(notare il "lib/*" :. dato a -cp

Quindi è possibile utilizzare Mx slime-connect per connettersi con questa istanza

Non so se è necessario, ma ho letto che è una buona idea usare la stessa versione di clojure, clojure-contrib e swank-clojure su entrambi i lati.

È anche possibile impostare il percorso all'interno di emacs consenendo il "." In classpath swank-clojure-class.

2

Oltre a "caricare" i file sorgente, è possibile utilizzare anche la funzione "dipendenze checkout" di leiningen. Se hai due progetti leiningen, ad esempio, il progetto A richiede B (fornitore). Nella directory root del progetto A, crea una directory chiamata "checkouts". All'interno di "/ checkouts" creare un collegamento simbolico alla directory principale del progetto B.

- project A 
    - project.clj 
    - checkouts 
    - symlink to project B 
    - src 
    - test 

in project.clj progetto di A, dichiarano progetto B come una dipendenza nella: Dipendenze sezione come se si trattasse di un progetto in clojars.org. Per esempio.

(defproject project-a 
:dependencies [[org.clojure/clojure "1.5.1"] 
       [project-b "0.1.0"]]) 

La cosa però è, si deve andare nel progetto B e tipo:

lein install 

che compilerà i file di progetto di B in un file JAR, che apparirà nella vostra directory ~/.m2 , che è un po 'come la cache locale di clojars.org.

Una volta impostato tutto questo in su, nel file * .clj src (s) del progetto A, si può "richiedere" file di progetto B nel modo normale, come se fosse da clojars.org:

(ns project-a.core 
    (:require [project-b.core :as pb]) 

in questo modo, è possibile fare riferimento alle funzioni nel progetto-b.core modo consueto in questo modo:

pb/myfunction1 

a mio parere, questo è un buon modo per condividere librerie e dati tra i progetti Leiningen cercando di mantenere ogni progetto Leiningen come indipendente, autonomo e il più minimale possibile.

Problemi correlati