我想谦虚地询问一下...
对于常量值,"使用var还是ref/atom/agent?",我该怎么办呢?
当然,我会使用vars来表示常量值。
但我一直在想,当这些值表现得像常量但需要在运行时而不是编译时(代码读取时)被赋值时,我应该使用哪个呢?
例如,考虑一些Java属性写在用户的配置文件中。它们应该在运行时被分配,因为数据不在代码中。但是在数据被读取之前也应该被定义,因为其他代码引用它们。
在这种情况下,
我什么时候使用'var':
- 我定义'var',或者只声明'var'(当可以这样做时)。
- 然后我通过读取选项文件的函数重新定义这些'var'。
- 但是覆盖'var'感觉很糟糕,或者在函数内部定义'var'感觉很奇怪。
我什么时候使用ref/atom/agent:
- 我将ref/atom/agents分配给'var'。
- 然后我通过读取选项文件的函数更新这些ref/atom/agents。
- 但是,由于这些值在整个程序中都被使用,所以我担心它们的成本。
- ...而且使用太多@宏有点烦人。
我不知道该用什么。
你在这种情况下使用什么?
'var'?'ref/atom/agent'?甚至是'delay'?
提前致谢。
@my-var
,你可以定义一个包装函数,它返回@my-var
。 - hsestupinns.with-const
中,第一行代码是(def my-const (some-computations))
。因此,在这个表达式被求值之前,所有试图使用或要求ns.with-const
的命名空间都不会开始评估它们自己的代码。在这个模型中没有竞争条件。当你的常量被计算出来时,它就变成了定义,并且一切都正常工作。希望这个解释有意义。 - hsestupin