2

プログラムで次のようなものに遭遇しました:

(defonce foo nil)
(alter-var-root #'foo (constantly 4))

上記のコードは always を使用しているため、以下のような単純なdefよりも優先する理由はありますか?

(def foo 4)

defonceとの一貫性を高めるためだけですか、それとも def を使用することには欠点がありますか?

4

1 に答える 1

1
(ns banana)
(defonce foo nil)

(ns user)
(use 'banana)

foo ;=> nil

(alter-var-root #'foo (constantly 42))
foo ;=> 42

(def foo 50)
CompilerException java.lang.IllegalStateException: foo already refers to: #'banana/foo in namespace: user
于 2013-07-21T18:37:57.417 に答える