How do I refer to functions from a loaded file?
我有一个函数可以从另一个文件加载表达式,但是我不知道文件名是什么,它存储在变量中:
1 2 3 | (defn run-migration [filename] (load filename) (run)) |
我知道所有这些文件都有一个称为" run"的通用方法。因此,我尝试在加载该函数后调用它,但是当我尝试在repl中甚至在加载文件之前要求此文件时,却收到"无法解析符号:运行"错误。显然clojure正在尝试编译文件,并且由于加载发生在函数内部,因此当时没有绑定"运行"吗?
可能我会以错误的方式进行操作。有什么好的(惯用的)方法指导,可以使一组文件在运行时加载并运行?
在我的一个项目中,我使用以下代码(真实代码的片段)动态加载模块:
1 2 3 4 5 6 7 8 | ... loop over found namespaces with following body.... (require (vector n :reload true)) (let [load-fun (ns-resolve n (symbol"load-rules"))] (when load-fun (try (load-fun) (catch Exception ex (error (str"Error during executing of func from namespace '" n"':" ex)))))) |
此处
中查找模块所用的代码示例
您可以告诉编译器函数
1 2 3 | user> (declare run) #'user/run user> (load"filename") |
将把您的文件加载到repl中。也许您可能想通过绑定ns来设置将文件加载到其中的名称空间,尽管这不一定是必须的。