简单的问题.我是Clojure的新手.
如何在另一个文件中使用项目中的一个文件?基本上我如何包含,导入或需要其他文件?不是来自图书馆而是来自我自己的代码.
谢谢,亚历克斯
Mic*_*zyk 24
通常,您需要使用与库代码相同的方法,即use/ require您的命名空间(通过ns文件顶部的表单,有时是REPL中的use/ requirefunctions).为此,您必须确保它们位于类路径中.简短指南:
遵循通常的Clojure项目结构:src/包含所有源文件的目录,其中file src/foo/bar/baz.clj定义名为的命名空间foo.bar.baz.注意,您必须维护目录结构/命名空间名称结构的对应关系; 事情不会起作用.另请注意,不能使用_命名空间名称中的-字符或文件名中的字符(连字符),并且无论何时_在文件名中使用,都必须使用-in命名空间名称(反之亦然.)最后,目录层次结构将略有不同更复杂的Maven项目,但现在不要担心(除非你已经是Maven的熟练用户,在这种情况下这对你来说不是问题).
另请参阅我之前的一个关于使用Clojure进行Java类路径处理的SO问题的答案,以获得有关文件系统层次结构/类路径层次结构对应关系的更详细的逐步说明.
如果foo.bar命名空间中的代码需要使用命名空间中的代码foo.quux.baz,请执行类似(ns foo.bar (:require [foo.quux.baz :as baz]))in foo/bar.clj和调用函数bazas的操作baz/some-function.或者你可以把(:use foo.quux.baz)在ns形式,而不是直接调用它们(没有命名空间限定词,如some-function).这与你为图书馆代码所做的完全相同.
使用REPL中的项目代码时,请确保src/在类路径中包含目录(目录本身,而不是其中的任何文件).你应该考虑使用一些工具为你自动化REPL设置(包括类路径管理); Leiningen很受Clojurians的欢迎,也有使用Maven和Clojure的插件.
警告:您的JVM启动命令可能(实际上可能会)识别一个名为的环境变量$CLASSPATH.至于它与你的Clojure项目的关系,基本上应该没有.更有可能的是,你的项目每个都需要一个不同的类路径,有些可能使用某些罐子的版本与其他人不同的版本(特别是如果你使用Clojure 1.1 - 最新的稳定版本 - 对于某些项目,同时进行实验与其他人一起拍摄1.2张快照).因此,管理类路径的正确方法是为每个项目准备一个最小版本,并将其传递给JVM启动命令.如前所述,您应该花一些时间学习使用一个好的工具(如上面提到的Leiningen)来尽快为您设置类路径,这样您就不必自己关心它了.
(作为旁注,在某些情况下,您可能不得不在类路径中添加更多src/目录和jars,例如,如果您打算调用compile生成.class文件,则必须将目标目录放在类路径上.但这超出了这个问题的范围.)
顺便说一下,我已经用"正常"这个词开始了这个答案,因为你也可以使用load&之类的东西in-ns将单个命名空间拆分成多个文件.但大多数情况下,这并不是你真正想做的事情.只需使用经过深思熟虑的命名空间布局.