Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 有没有办法将'require'和'import'范围限定到函数内部?_Function_Clojure_Dependencies - Fatal编程技术网

Function 有没有办法将'require'和'import'范围限定到函数内部?

Function 有没有办法将'require'和'import'范围限定到函数内部?,function,clojure,dependencies,Function,Clojure,Dependencies,我对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/fo

我对Clojure中的
require
s和
import
s的范围有点困惑。我是否可以要求依赖项只保留在函数的范围内

当我执行如下操作时,我会得到显示的错误

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) 

不,这些仅设计用于您的
ns
表单。

不,这些仅设计用于您的
ns
表单。

我不确定您将
require
语句移出
ns
声明的动机。
require
语句说明了该命名空间的依赖关系


如果这些依赖项只涉及命名空间的某些函数,则可以考虑将这些函数移动到不同的命名空间中,从而释放依赖项的第一命名空间,以及创建更松散的耦合。

我不确定您将
require
语句移出
ns
声明的动机。
require
语句说明了该命名空间的依赖关系


如果这些依赖项只涉及命名空间的某些函数,则可以考虑将这些函数移动到不同的命名空间中,从而释放依赖项的第一命名空间,创建更松散的耦合。

我并不反对Grav的建议——这是一种选择——但我不认为加载依赖项仅用于一个函数有什么缺点

有时,有理由使用
ns
或ns中的
临时切换文件中的名称空间:

(ns foo.bar)

... more code here ...

(ns foo.parameters [:require foo.baz :as bz])
(def my-parm (bz/inc2 42))
(ns foo.bar)
您可以使用它使
require
d名称空间暂时可用,但这通常是应该避免的


和许多人一样,这是我最喜欢的名称空间介绍。

我并不反对Grav的建议——这是一个选项——但我不认为加载仅用于一个函数的依赖项有什么缺点

有时,有理由使用
ns
或ns
中的
临时切换文件中的名称空间:

(ns foo.bar)

... more code here ...

(ns foo.parameters [:require foo.baz :as bz])
(def my-parm (bz/inc2 42))
(ns foo.bar)
您可以使用它使
require
d名称空间暂时可用,但这通常是应该避免的


和许多人一样,这是我最喜欢的名称空间介绍。

我想你的意思是说
:require
只能在
ns
表单中使用
require
可以在
ns
之外使用,虽然这当然不常见,但在repl提示符下除外。你说的是真的,但这不是我想说的。这个问题的重点是如何要求事情“范围化”到一个特定的函数,重要的是答案是“不,你不能这样做,这是你应该做的”。您可以从repl调用
require
,这一事实实际上并不相关,只会让提出此问题的人混淆问题。我想您的意思是说
:require
只能在
ns
表单中使用
require
可以在
ns
之外使用,虽然这当然不常见,但在repl提示符下除外。你说的是真的,但这不是我想说的。这个问题的重点是如何要求事情“范围化”到一个特定的函数,重要的是答案是“不,你不能这样做,这是你应该做的”。您可以从repl调用
require
,这一事实实际上并不相关,只会让提出此问题的人混淆问题。每个人都警告我,这是一种必须避免的行为。现在,很明显,这对于你的日常Clojure代码来说是正确的。只是为了子孙后代,我想承认,除非是为了某种特殊情况下的黑魔法,否则我不会这么做。那样的话,就没问题了。:-)每个人都在警告我,这是应该避免的。现在,很明显,这对于你的日常Clojure代码来说是正确的。只是为了子孙后代,我想承认,除非是为了某种特殊情况下的黑魔法,否则我不会这么做。那样的话,就没问题了。:-)