是否可以将函数的参数声明为原子?
例如,
(defn make-withdraw [(atom balance)]
(fn [amount]
(if (>= @balance amount)
(do (swap! balance #(- % amount)) @balance)
"Insufficient funds")
))
谢谢!
答案 0 :(得分:3)
Clojure是一种动态类型语言,所以参数是你传递给它的任何东西,你在函数中如何使用它是重要的。
所以只需将一个原子传递给该函数,然后设置为:
(make-withdraw (atom 1000))
或使用make-withdraw
:
let
函数中创建原子
(defn make-withdraw
[balance]
(let [state (atom balance)]
(fn [amount]
(if (>= @state amount)
(do (swap! state #(- % amount)) @state)
"Insufficient funds"))))