Clojure:交换并重置以更改标识符值

时间:2017-07-16 06:52:47

标签: clojure

我是Clojure的新手。

我曾经使用swap!reset!来更改标识符的值。

重置<!/强>

(def item (atom "Apple"))

user=> @item

Out Put ;; =&gt; “苹果”

(reset! item "Grapes")

user=> @item

Out Put ;; =&gt; “葡萄”

交换!

(def item (atom "Apple"))

user=> @item

Out Put ;; =&gt; “苹果”

(swap! item (#(str %) "PineApple"))

Out Put ;; =&gt; ClassCastException java.lang.String cannot be cast to clojure.lang.IFn

如何使用 swap!更改项目的值?

2 个答案:

答案 0 :(得分:3)

(swap! item (fn [old] "PineApple"))

或:

(swap! item (fn [_] "PineApple"))

但是当你丢弃输入时,reset!在这里更好:

(reset! item "PineApple") 

答案 1 :(得分:0)

根据swap!语法(swap! atom f)。交换应该需要功能。

所以我只是试图以这种方式解决问题。

(swap! item (fn[s] "Banana"))

输出 ;; =&gt;香蕉