在ruby中,我经常File.expand_path(File.dirname(__FILE__))用于加载配置文件或带有测试数据的文件.现在我正在尝试在我的clojure应用程序中加载一些html文件进行测试,如果没有硬编码文件的完整路径,我无法弄清楚如何做到这一点.
编辑:我正在使用leinigen,如果这有任何帮助
ref:__ FILE__是一个特殊的文字,它返回执行时给程序的文件名(包括任何路径).看(rubydoc&perldata)
这是在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 /
9点解决方案都不正确.*file*为您提供相对于类路径的文件.在*file*上使用.getCanonicalPath或.getAbsolutePath将为您提供一个不存在的文件.正如在这个旧线程中所指出的,您需要使用ClassLoader来正确解析*file*.这是我用来获取当前文件的父目录的内容:
(-> (ClassLoader/getSystemResource *file*) clojure.java.io/file .getParent)
Run Code Online (Sandbox Code Playgroud)