clojure - 与项目相关的 slurping 文件
clojure - slurping files relative to project
我有一个使用 leningen 创建的项目,其中我将 clj 文件保存在 src/some_project_name 目录中(与自动生成的 core.clj 文件一起)。
与这些 clj 文件一起保存的还有文本文件,我想从它们旁边的 clj 文件中 slurp
。我的理解是,读取文件是相对于工作目录的,工作目录将是您启动 REPL 的任何地方。我从所有文件所在的 src/some_project_name 内部启动 REPL,而不是 root。 (System/getProperty "user.dir")
确认这是活动目录。
然而我也读到 slurp
将查找与您的根目录相关的文件,这显然是尽管从 src/some_project_name 中启动 REPL 时发生的情况。我必须列出相对于根目录的文本文件路径以便找到它们,例如"src/some_project_name/foo.txt" 而不仅仅是 "foo.txt".
在设置项目之前,相对于 REPL 运行 所在的位置可以访问文件(如我所料)。现在在设置项目后,它们似乎只能相对于 root 访问,无论 REPL 在何处启动。
我对此没有问题,但我不明白。 leningen 是否进行了一些设置来拦截 REPL 评估并告诉它从根目录而不是活动目录所在的位置进行搜索?
我相信 Leiningen REPL 使用项目根目录作为它们的工作目录。 (如果没有蹦床,他们使用带有预期工作目录的子进程——在 lein repl
之后尝试 jps -l
,你应该看到两个 clojure.main
进程。)
在单独的注释中,您可能希望使用 clojure.java.io/resource
使用类路径相对路径加载文件。此类文件通常放置在 resources
文件夹中 – 对于 Leiningen,这通常是 src
.
的同级文件夹
例如,如果您将 foo.txt
放在 resources/some_project_name
中,您应该能够执行以下操作:
(require '[clojure.java.io :as io])
(slurp (io/resource "some_project_name/foo.txt"))
我有一个使用 leningen 创建的项目,其中我将 clj 文件保存在 src/some_project_name 目录中(与自动生成的 core.clj 文件一起)。
与这些 clj 文件一起保存的还有文本文件,我想从它们旁边的 clj 文件中 slurp
。我的理解是,读取文件是相对于工作目录的,工作目录将是您启动 REPL 的任何地方。我从所有文件所在的 src/some_project_name 内部启动 REPL,而不是 root。 (System/getProperty "user.dir")
确认这是活动目录。
然而我也读到 slurp
将查找与您的根目录相关的文件,这显然是尽管从 src/some_project_name 中启动 REPL 时发生的情况。我必须列出相对于根目录的文本文件路径以便找到它们,例如"src/some_project_name/foo.txt" 而不仅仅是 "foo.txt".
在设置项目之前,相对于 REPL 运行 所在的位置可以访问文件(如我所料)。现在在设置项目后,它们似乎只能相对于 root 访问,无论 REPL 在何处启动。
我对此没有问题,但我不明白。 leningen 是否进行了一些设置来拦截 REPL 评估并告诉它从根目录而不是活动目录所在的位置进行搜索?
我相信 Leiningen REPL 使用项目根目录作为它们的工作目录。 (如果没有蹦床,他们使用带有预期工作目录的子进程——在 lein repl
之后尝试 jps -l
,你应该看到两个 clojure.main
进程。)
在单独的注释中,您可能希望使用 clojure.java.io/resource
使用类路径相对路径加载文件。此类文件通常放置在 resources
文件夹中 – 对于 Leiningen,这通常是 src
.
例如,如果您将 foo.txt
放在 resources/some_project_name
中,您应该能够执行以下操作:
(require '[clojure.java.io :as io])
(slurp (io/resource "some_project_name/foo.txt"))