deref

added
1.0

ns
clojure.core

type
function

(deref ref) (deref ref timeout-ms timeout-val)

Also reader macro: @ref/@agent/@var/@atom/@delay/@future/@promise. Within a transaction,
returns the in-transaction-value of ref, else returns the
most-recently-committed value of ref. When applied to a var, agent
or atom, returns its current state. When applied to a delay, forces
it if not already forced. When applied to a future, will block if
computation not complete. When applied to a promise, will block
until a value is delivered.  The variant taking a timeout can be
used for blocking references (futures and promises), and will return
timeout-val if the timeout (in milliseconds) is reached before a
value is available. See also - realized?.

                user=> (def a (atom 0))
#'user/a
user=> @a
0
user=> (deref a)
0

user=> (def b (ref 1))
#'user/b
user=> @b
1
user=> (deref b)
1

user=> (def c (agent 2))
#'user/c
user=> @c
2
user=> (deref c)
2

user=> (def d (future 3))
#'user/d
user=> @d
3
user=> (deref d)
3
            
                user=> (def a (promise))
#'user/a
user=> (deref a) ;; blocking until a delivery occurs <ctrl-c>

user=> (deref a 100 :timeout) ;; block for at most 100ms
:timeout