Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/windows-phone-8/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何在另一个文件中使用项目中的一个文件?_Clojure - Fatal编程技术网

Clojure 如何在另一个文件中使用项目中的一个文件?

Clojure 如何在另一个文件中使用项目中的一个文件?,clojure,Clojure,简单的问题。我是新来Clojure的 如何在另一个文件中使用项目中的一个文件?基本上,我如何包含、导入或要求另一个文件?不是从库中而是从我自己的代码中 谢谢, Alex通常,您希望使用与库代码相同的方法,即使用/要求您的命名空间(通过文件顶部的ns表单,有时通过REPL的使用/要求函数)。要使其工作,必须确保它们位于类路径上。这方面的简短指南: 遵循通常的Clojure项目结构:一个包含所有源文件的src/目录,其中filesrc/foo/bar/baz.clj定义了一个名为foo.bar.ba

简单的问题。我是新来Clojure的

如何在另一个文件中使用项目中的一个文件?基本上,我如何包含、导入或要求另一个文件?不是从库中而是从我自己的代码中

谢谢,
Alex

通常,您希望使用与库代码相同的方法,即
使用
/
要求
您的命名空间(通过文件顶部的
ns
表单,有时通过REPL的
使用
/
要求
函数)。要使其工作,必须确保它们位于类路径上。这方面的简短指南:

  • 遵循通常的Clojure项目结构:一个包含所有源文件的
    src/
    目录,其中file
    src/foo/bar/baz.clj
    定义了一个名为
    foo.bar.baz
    的命名空间。请注意,必须维护目录结构/命名空间名称结构对应关系;否则事情就不会成功。还请注意,不得在命名空间名称中使用
    字符或在文件名中使用
    -
    字符(连字符),并且每当在文件名中使用
    时,必须在命名空间名称中使用
    -
    (反之亦然),对于Maven项目,目录层次结构会稍微复杂一些,但是现在不要担心这一点(除非您已经是Maven的熟练用户,在这种情况下,这对您来说不是问题)

    请参阅前面关于Clojure的Java类路径处理的SO问题,以获得关于文件系统层次结构/类路径层次结构对应关系的更详细的逐步解释

  • 如果来自
    foo.bar
    命名空间的代码需要使用来自
    foo.qux.baz
    命名空间的代码,请执行类似
    (ns foo.bar(:require[foo.qux.baz:as baz])
    的操作,并在
    foo/bar.clj
    中调用来自
    baz
    的函数作为
    baz/某些函数。或者您可以将
    (:use foo.quox.baz)
    放在
    ns
    表单中,直接调用它们(不带名称空间限定符,例如
    某些函数
    )。这与您对库代码所做的操作完全相同

  • <强>当使用来自RePL的项目代码时,确保在CasSpATH中包含<代码> SRC/< /COD>目录(目录本身,而不是其中的任何文件)。< /强>您应该考虑使用一些工具来自动为您提供RePL安装(包括类路径管理);Clojure非常受Clojure人的欢迎,也有将Maven与Clojure一起使用的插件

    警告:您的JVM启动命令可能(事实上,可能会)识别名为
    $CLASSPATH
    的环境变量。至于它与你的Clojure项目的关系,基本上应该没有。更有可能的是,您的项目将需要不同的类路径,其中一些可能使用与其他项目所需版本不兼容的某些JAR版本(特别是如果您对某些项目使用Clojure 1.1(最新的稳定版本),而对其他项目使用1.2快照)。因此,管理类路径的正确方法是为每个项目准备一个最小版本,并将其传递给JVM启动命令。正如前面提到的,您应该花一些时间学习使用一个好的工具(如上面提到的Leiningen)尽快为您设置类路径,这样您就不需要自己关心这个问题了

    (作为旁注,在某些情况下,您可能需要向类路径添加的不仅仅是
    src/
    目录和
    jar
    s,例如,如果您计划调用
    compile
    来生成
    .class
    文件,您还必须将目标目录放在类路径上。不过,这超出了这个问题的范围。)


    顺便说一句,我用“正常”这个词开始回答这个问题,因为您也可以在ns
    中使用
    load
    &
    之类的方法将单个名称空间拆分为多个文件。不过,大多数情况下,这并不是您真正想要做的;只需使用经过深思熟虑的名称空间布局即可。

    您还可以提到有关类路径的内容,我认为这是r新用户。@Brian:谢谢你的建议!我花了一段时间才意识到你指的是
    $CLASSPATH
    -环境变量(你是,不是?:-),但我已经编辑了答案,以包含一些关于它的信息(在我做时添加了一些不相关的位)。