我有一个循环,循环来自不同命名空间的多个函数。 所以,我想说(语法不完美,我确定):
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"这个怎么样?
答案 0 :(得分:0)
A.evaluate
无效的Clojure语法。我怀疑[(getTimeIncrement)]
也是错误的(这会将包含(getTimeIncrement)
结果的向量作为time
的{{1}} arg传递。此外,您使用A/evaluate
将无法编译,因为它没有有效的绑定表单,并且不会进行任何循环,因为它没有loop
的任何调用。
在设计层面,命名空间应保持本地状态的想法通常在Clojure中被误导。命名空间每个都是一个单独的类,因此跟踪状态的任何函数都混合了各种调用者的关注点。功能编程中函数的职责不是封装可变状态,而是将无状态操作封装在不可变输入上。
所有这些都表示,尽管在Clojure中本地状态通常是一个坏主意,但如果实际需要它可以保持可变的本地状态(例如,保留本地存储结果以进行记忆或定时信息用于剖析)。
recur