我如何要求并提供clojure文件?

时间:2009-07-22 19:24:38

标签: clojure

我有一组保存在.clj中的函数。

如何提供所选的一组功能,然后在我的其他文件中导入这些功能?

3 个答案:

答案 0 :(得分:27)

您有几个选择。

如果它只是一个文件(不在包中),那么在您的文件中,您可以使用load。如果您的文件名为“fun.clj”,则只需使用不带扩展名的文件名称:

 (load "fun")

(提供fun.clj在您的类路径上)。或

 (load "files/fun") 

如果它不在您的类路径上,而是在files目录中。

或者您可以使用load-file并将其传递给您的文件位置:

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

如果你想命名它们(把它们放在一个包中),你就把ns宏放在文件的开头,再把它放在你的类路径上。然后,您可以通过userequire加载它。

以下是我所描述的功能的文档:

答案 1 :(得分:3)

除了“加载”源文件外,您还可以使用leiningen“checkout dependencies”功能。如果你有两个leiningen项目,比如说项目A需要B(提供者)。在项目A的根目录中,创建一个名为“checkouts”的目录。 “/ checkouts”里面是项目B根​​目录的符号链接。

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

在项目A的project.clj中,将项目B声明为:dependencies部分中的依赖项,就像它是clojars.org中的项目一样。 E.g。

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

但事实是,你必须进入项目B并输入:

lein install

这会将项目B的文件编译成一个jar文件,该文件将出现在你的〜/ .m2目录中,这有点像你的本地clojars.org缓存。

一旦你设置了所有这些,在项目A的* .clj src文件中,你就可以正常方式“需要”项目B文件,就像它来自clojars.org一样:

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

这样,您可以通过以下方式参考项目中的函数-b.core:

pb/myfunction1

在我看来,这是在Leiningen项目之间共享库和数据的一种非常好的方式,同时尝试将每个Leiningen项目保持为独立,自包含且尽可能小的。

答案 2 :(得分:1)

这个解决了我的问题,我在这里看了无数其他问题,所以我想澄清一下。

emacs(在linux上)最简单的方法就是做这样的事情:

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

(注意“lib / *”:。给予-cp

然后您可以使用M-x slime-connect连接此实例。

不知道是否需要,但我已经读过,在两边使用相同版本的clojure,clojure-contrib和swank-clojure是个好主意。

您还可以通过查看“。”来设置emacs内的路径。 to swank-clojure-classpath。