clojure中的命名空间局部变量

时间:2014-06-27 04:04:00

标签: clojure namespaces functional-programming

我有一个循环,循环来自不同命名空间的多个函数。 所以,我想说(语法不完美,我确定):

namespace A:
   (defn evaluate [time] ...do calculations that involve running variables that only pertain to current namespace... )

core.clj
:
(loop
     (A.evaluate [(getTimeIncrement)])
)

让我们说我需要保持一个运行的总值,在评估中运行max和running min。我不想每次都返回所有这些,只是将它们传回每次循环迭代。我觉得把它们作为"命名空间局部变量"会更好。并将那些与核心文件分开。什么是" clojure"这个怎么样?

1 个答案:

答案 0 :(得分:0)

A.evaluate无效的Clojure语法。我怀疑[(getTimeIncrement)]也是错误的(这会将包含(getTimeIncrement)结果的向量作为time的{​​{1}} arg传递。此外,您使用A/evaluate将无法编译,因为它没有有效的绑定表单,并且不会进行任何循环,因为它没有loop的任何调用。

在设计层面,命名空间应保持本地状态的想法通常在Clojure中被误导。命名空间每个都是一个单独的类,因此跟踪状态的任何函数都混合了各种调用者的关注点。功能编程中函数的职责不是封装可变状态,而是将无状态操作封装在不可变输入上。

所有这些都表示,尽管在Clojure中本地状态通常是一个坏主意,但如果实际需要它可以保持可变的本地状态(例如,保留本地存储结果以进行记忆或定时信息用于剖析)。

recur