将函数的参数声明为原子

时间:2014-01-20 21:28:29

标签: clojure

是否可以将函数的参数声明为原子?

例如,

(defn make-withdraw [(atom balance)]
  (fn [amount]
    (if (>= @balance amount)
      (do (swap! balance #(- % amount)) @balance)
      "Insufficient funds")
  ))

谢谢!

1 个答案:

答案 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"))))