我正在编写一些需要存储有关当前命名空间的数据的代码.我的代码生成了一个本体,我需要在clojure调用之间分配需要保留的URI.这些URI是自动生成的,因此不仅仅是代码作者编写它们的情况.
我想使用与Emacs存储数据的方式类似的机制; 通过生成一些lisp表单并将其保存在文件中.然后可以在clojure开始时评估这些,并且每个人都很开心.使用像leningen这样的工具时,这些文件最终会出现在根目录中.
我可以根据标准目录约定构建,但我更愿意直接从clojure获取数据; 我知道编译器将源位置数据添加到clojure; 有没有办法可以自己访问?
Ale*_*lex 15
如果您正在寻找当前在运行时执行代码的命名空间,那么您只需查看以下值clojure.core/*ns*:
user> (defn which-ns? [] (str *ns*))
user> (which-ns?)
"user"
user> (ns user2)
user2> (which-ns?)
"user2"
Run Code Online (Sandbox Code Playgroud)
如果您正在查找定义了var或命名空间的文件,那么您所引用的源代码位置在评估def表单时由编译器作为元数据存储在var中:
user> (defn foo [x] (inc x))
user> (meta #'foo)
{:arglists ([x]), :ns #<Namespace user>, :name foo, :line 1, :file "NO_SOURCE_FILE"}
Run Code Online (Sandbox Code Playgroud)
"NO_SOURCE_FILE"是因为您正在评估在REPL中输入的表单.如果从源文件中评估代码,:file则将指向源文件的路径名.
| 归档时间: |
|
| 查看次数: |
3922 次 |
| 最近记录: |