1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00

Add Define Something Only Once as a clojure til

This commit is contained in:
jbranchaud
2016-05-16 20:52:48 -05:00
parent c0ae3009bf
commit bb7ca94369
2 changed files with 24 additions and 1 deletions

View File

@@ -7,7 +7,7 @@ variety of languages and technologies. These are things that don't really
warrant a full blog post. These are mostly things I learn by pairing with
smart people at [Hashrocket](http://hashrocket.com/).
_418 TILs and counting..._
_419 TILs and counting..._
---
@@ -44,6 +44,7 @@ _418 TILs and counting..._
- [Aggregation Using merge-with](clojure/aggregation-using-merge-with.md)
- [Argument Requirements For A Function](clojure/argument-requirements-for-a-function.md)
- [Combinations Of Items From A Sequence](clojure/combinations-of-items-from-a-sequence.md)
- [Define Something Only Once](clojure/define-something-only-once.md)
- [Evaluate One Liners With lein-exec](clojure/evaluate-one-liners-with-lein-exec.md)
- [Expanding Macros](clojure/expanding-macros.md)
- [Get The Value Of An Environment Variable](clojure/get-the-value-of-an-environment-variable.md)

View File

@@ -0,0 +1,22 @@
# Define Something Only Once
Clojure provides [`defonce`](https://clojuredocs.org/clojure.core/defonce)
which is a macro that defines something only once. Once a variable has been
bound to a value, subsequent attempts to do `defounce` for that variable
will go unevaluated. This will have no implications for how the `def`
special form works.
Here is an example:
```clojure
(defonce stuff 5)
#'user/stuff
user=> (defonce stuff "what")
nil
user=> stuff
5
user=> (def stuff "okay")
#'user/stuff
user=> stuff
"okay"
```