我对Clojure中的requires和imports的范围有点困惑。我是否需要只停留在函数作用域中的依赖关系?
当我做类似的事情时,我会得到显示的错误。
user=> (defn test1 [x] (require '[taoensso.timbre :as timbre]) (timbre/log x))
CompilerException java.lang.RuntimeException: No such namespace: timbre, compiling:(/tmp/form-init1203922056301029971.clj:1:57) 发布于 2016-08-06 03:10:34
我不反对Grav的建议--这是一种选择--但我看不出加载依赖只用于一个函数的缺点。
偶尔也有理由使用ns或in-ns临时切换文件中的命名空间。
(ns foo.bar)
... more code here ...
(ns foo.parameters [:require foo.baz :as bz])
(def my-parm (bz/inc2 42))
(ns foo.bar)您可以使用它来使required命名空间暂时可用,但这通常是应该避免的。
和许多人一样,科林·琼斯的博客文章是我最喜欢的名称空间介绍。
发布于 2016-08-04 09:35:39
我不确定您将require语句从ns声明中移出的动机。require语句声明该命名空间的依赖项。
如果这些依赖项仅与名称空间的某些函数相关,则可以考虑将这些函数移到不同的名称空间中,从而释放第一个依赖空间,并创建更松散的耦合。
发布于 2016-08-04 06:31:57
不,这些设计只用于ns表单中。
https://stackoverflow.com/questions/38759343
复制相似问题