【发布时间】:2018-12-17 19:23:48
【问题描述】:
我正在学习 clojurescript,我遇到了这个 sn-p。
:on-click (fn [] (swap! state/order update (:id gig) inc))
我查找了 update 函数的文档,它说更新需要一个键和一个函数。将旧值从原子传递给函数,然后更新原子。如果原子中的键没有现有值,则将 nil 作为输入传递给函数。
当我在 repl 中尝试同样的事情时它没有工作
(def atom-test (atom {}))
(swap! atom-test update :aa inc)
NullPointerException clojure.lang.Numbers.ops (Numbers.java:1013)
添加 fnil 来捕获此 NullPointerException 有效。
user=> (swap! atom-test update :aa (fnil inc 0))
{:aa 1}
我不明白为什么它在 clojurescript 中的案例 1 中有效,以及为什么它在 clojure repl 中的案例 2 中无效。谁能解释一下这里的诀窍。
【问题讨论】:
-
同理,可以在浏览器控制台输入
1 + null得到1,不会报错。我会在两边都使用fnil。
标签: clojure clojurescript