什么是__FILE__的Clojure等价物(在Ruby和Perl中找到)

jsh*_*hen 10 clojure

在ruby中,我经常File.expand_path(File.dirname(__FILE__))用于加载配置文件或带有测试数据的文件.现在我正在尝试在我的clojure应用程序中加载一些html文件进行测试,如果没有硬编码文件的完整路径,我无法弄清楚如何做到这一点.

编辑:我正在使用leinigen,如果这有任何帮助

ref:__ FILE__是一个特殊的文字,它返回执行时给程序的文件名(包括任何路径).看(rubydoc&perldata)

dra*_*tun 9

这是在Clojure中复制它的一种方法:

(defn dirname [path]
  (.getParent (java.io.File. path)))

(defn expand-path [path]
  (.getCanonicalPath (java.io.File. path)))
Run Code Online (Sandbox Code Playgroud)

那么你File.expand_path(File.dirname(__FILE__))在Clojure中的Ruby系列就是这样的:

(expand-path (dirname *file*))
Run Code Online (Sandbox Code Playgroud)

Java的互操作性文档.getParent&.getCanonicalPath.


NB.我想*file*总是在Clojure中返回绝对的(虽然不是规范的)路径名/文件名.而__FILE__返回执行时提供的路径名/文件名.但是我不认为这些差异会影响你的尝试吗?

/ I3az /


cld*_*ker 7

9点解决方案都不正确.*file*为您提供相对于类路径的文件.在*file*上使用.getCanonicalPath或.getAbsolutePath将为您提供一个不存在的文件.正如在这个旧线程中所指出的,您需要使用ClassLoader来正确解析*file*.这是我用来获取当前文件的父目录的内容:

(-> (ClassLoader/getSystemResource *file*) clojure.java.io/file .getParent)
Run Code Online (Sandbox Code Playgroud)