私は関数のセットを.cljに保存しています。Clojureファイルはどのように要求し提供するのですか?
選択した関数セットを指定して、これらの関数を他のファイルにインポートするにはどうすればよいですか?
私は関数のセットを.cljに保存しています。Clojureファイルはどのように要求し提供するのですか?
選択した関数セットを指定して、これらの関数を他のファイルにインポートするにはどうすればよいですか?
あなたはいくつかの選択肢があります。
ファイル(パッケージではない)の場合、ファイルにはload
を使用できます。あなたのファイルは、「fun.clj」と命名された場合は、あなただけの拡張子のないファイルの名前を使用します。
(load "fun")
(提供fun.clj
は、あなたのクラスパス上にありました)。それとも、あなたのクラスパスではなくfiles
ディレクトリに
(load "files/fun")
なかった場合。
それともload-file
を使用して、それをあなたのファイルの場所を渡すことができます。
(load-file "./files/fun.clj")
あなたが(パッケージに入れて)、それらを名前空間に望んでいた場合は、あなたが最初にns
マクロを置くところあなたのファイルの、あなたのクラスパスに再び置く。その後、use
またはrequire
経由で読み込むことができます。ここで
は、私が説明してきた機能のためのドキュメントです:
これは私の問題を解決し、私はここで無数の他の問題を見てきましたので、私は明確にしたいと思います。
(Linuxの場合)のEmacsで最も簡単な方法は、このような何かを行うことです。
java -cp "lib/*":. clojure.main -e "(do (require 'swank.swank) (swank.swank/start-repl))"
(注意を "のlib/*" :.のMx次にあなたが使用することができます
を-cpするために与えられ
これは必須かどうかわかりませんが、私は同じバージョンのclojure、clojure-contrib、swank-clojureを両側で使用することをお勧めします。
swac-clojure-classpathに "。"を指定することで、emacs内のパスを設定することもできます。
"ロード"ソースファイルのほかに、 "チェックアウト依存関係"機能を使用することもできます。 2つのライニングプロジェクトがある場合、プロジェクトAにはB(プロバイダー)が必要です。プロジェクトAのルートディレクトリに、 "checkouts"というディレクトリを作成します。内部の "/ checkouts"は、プロジェクトBのルートディレクトリへのシンボリックリンクを作成します。プロジェクトAのproject.cljで
- project A
- project.clj
- checkouts
- symlink to project B
- src
- test
、に依存関係としてプロジェクトBを宣言する:それはclojars.org内のプロジェクトであるかのように依存関係セクション。例えば。
(defproject project-a
:dependencies [[org.clojure/clojure "1.5.1"]
[project-b "0.1.0"]])
事ががある
は、プロジェクトBと型に行かなければならない:あなたの〜/ .m2ディレクトリに表示されますjarファイルにプロジェクトBのファイルをコンパイルします
lein install
、あなたのローカルclojars.orgキャッシュのようなものです。
あなたはこのすべてを設定したら、それはclojars.orgからであったかのように、プロジェクトAのあなた* .cljのsrcファイル(複数可)に、あなたは、通常の方法でプロジェクトBファイルを「必要」ことができます。
(ns project-a.core
(:require [project-b.core :as pb])
この方法で、あなたはこのようなプロジェクト-b.core通常の方法で関数を参照することができます私の意見では
pb/myfunction1
、これはLeiningenをプロジェクト間でライブラリとデータを共有するためのかなり良い方法です。各ライニンゲンのプロジェクトを独立した、自己完結した、最小限のものにすることを試みています。
申し訳ありませんが、まだ問題はあります。私はstopwords.cljとAutotag.cljというファイルを持っています。ストップワードをオートタグにインポートしたい私は( "stopwords"をロードする)、 "私はストップワードとAutotagを同じフォルダに持っていますが、" classpathにstopwords__init.classまたはstopwords.cljを見つけることができませんでした "と言います。申し訳ありませんが、私は完全な初心者です。私を助けてください。 – unj2
現在のディレクトリはおそらくクラスパスにはないので、clojureはそれを「見る」ことができません。あなたのクラスパスのどこかにstopwords.cljを置いてください(またはあなたのクラスパスに "。"を含めるように変更してください)。 – seth
申し訳ありませんが、わかりません。ここでemacsユーザー。 – seth