2016-06-12 3 views

答えて

3

あなたが実証されているように、defonceチェックが名前のvarがすでに値を持っているかどうかを確認し、それがない場合には、それだけを残しています。結合既存のルートを変更するには、普通のdefを使用することができます。

;; using def or defonce here makes no difference 
(defonce moo "MOO") 

moo 
;=> "MOO" 

(def moo "CHANGED MOO") 

moo 
;=> "CHANGED MOO" 
1

それは常に間違いのように見えるので、私は、defdefonce D」のVARを再定義しないでしょう..あなたが意図的にそれを行う場合(あなたが本当に何らかの理由でそれを必要としている場合)、おそらくそれを強調したいでしょう。 alter-var-rootを使用して、同じように:

user> (defonce a 10) 
#'user/a 

user> (alter-var-root #'a (constantly 20)) 
20 
+0

あなたは私の意見では正しいですが、私は両方の方法が等価であることに注意したいのですが、それは純粋文体の決定です。 –

+0

が合意したので、私は可能性のあるエラーの類似性を言及したのです。私はいつも想像してみてください。私のコードを1年でどう読むのでしょうか?それは間違いかどうかを考えるでしょう。コメントはおそらくトリックを行うだろう) – leetwinski

+0

うん、私が言ったように、私はあなたに同意する。 :) –

関連する問題