Reputation: 11734
How can I over-ride (re-def) a defonce var at the repl?
> (defonce moo "MOO")
> moo
>> "MOO"
> (defonce moo "CHANGED MOO")
> nil
> moo
>> "MOO"
thanks
Upvotes: 0
Views: 534
Reputation: 17859
i wouldn't redefine defonce
'd var with def
, because it always looks like a mistake.. If you do it on purpose (if you really need it for some reason), you would probably want to emphasize it. Like by using alter-var-root
:
user> (defonce a 10)
#'user/a
user> (alter-var-root #'a (constantly 20))
20
Upvotes: 2
Reputation: 13304
As you demonstrated, defonce
checks to see if the named var already has a value, and if it does, leaves it alone. To change an existing root binding, you can just use a regular def
:
;; using def or defonce here makes no difference
(defonce moo "MOO")
moo
;=> "MOO"
(def moo "CHANGED MOO")
moo
;=> "CHANGED MOO"
Upvotes: 4