2016-06-07 47 views
3

说我有初始设置为0 我想初始化它,只有当它没有被预先初始化的原子,clojure交换最好的方法是什么?一个原子,如果它是零?

我现在拥有的一切:

(swap! atom #(if % % (initialize))) 

然而,这只是不看起来对我来说是惯用的。

必须有更可读的方式吗?

+0

'0'在clojure中是真实的,所以这永远不会调用'initialize'。你确定你最初没有把它设置为“nil”吗? – Lee

回答

6

通常,您可以使用fnil来避免首先进行初始化检查。例如(swap! counts update word (fnil inc 0))就是说在计数中增加关键字的值,但是如果没有值则使用0.

+0

我也会添加一个op的情况:'(swap!a(fni​​l identity(initialize)))' – leetwinski

相关问题