> - First, it seems from the api documentation that @x will work fine even if
> x is a var. I don't understand the following:
> Why isn't x a var?
vars automatically resolve to their value for convenience, however you
can access the var using (var x) or use the shorthand #' notation
which does the same thing:
user=> (var? #'a)
true
> - Second, I remember having seen a ref? function analogous to var? in the
> online documentation, but it doesn't seem to actualy exist:
(def r (ref 5))
user=> (isa? clojure.lang.Ref (class r))
true
Notably in this example r is actually a var, but is holding a ref as
its value.
So to write your function
(defn my-deref [x]
(if (or (isa? clojure.lang.Ref (class x))
(isa? clojure.lang.Agent (class x))
(isa? clojure.lang.Atom (class x)))
@x
x))
user=> (my-deref (ref 1))
1
user=> (my-deref (atom 1))
1
user=> (my-deref 1)
1
user=> (def x 2)
user=> (my-deref x)
2
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---