Using `undefined?` for anything other than JS interop is not recommended. I don't see any issues with:
(def foo (atom ::uninitialized)) For your watcher case. On Mon, Jan 14, 2013 at 11:25 PM, Frank Siebenlist < frank.siebenl...@gmail.com> wrote: > Ok - ClojureScript has an undefined? function that works like: > > > ClojureScript:cljs.user> (def v) > > ClojureScript:cljs.user> (undefined? v) > true > ClojureScript:cljs.user> (def w nil) > nil > ClojureScript:cljs.user> (undefined? w) > false > ClojureScript:cljs.user> (defn f [v] (if (undefined? v) :no-value v)) > #<function f(v){ > if((void 0 === v)) > {return "\uFDD0:no-value"; > } else > {return v; > } > }> > ClojureScript:cljs.user> (f z) > :no-value > ClojureScript:cljs.user> (f 1) > 1 > ClojureScript:cljs.user> (f y) > nil > > > which indicates that I can use that scheme to pass and detect "no-value" > arguments in cljs. > > Isn't it great to answer your own Qs ;-) > > -FS. > > > > On Jan 14, 2013, at 7:47 PM, Frank Siebenlist <frank.siebenl...@gmail.com> > wrote: > > > For clojure I came up with the following alternative using an unbound > var: > > > > user=> (def v) > > #'user/v > > user=> (defn f [x] (if (var? x) (if (bound? x) x :no-value) x)) > > #'user/f > > user=> (f v) > > #<Unbound Unbound: #'user/v> > > user=> (f #'v) > > :no-value > > user=> (f #'map) > > #'clojure.core/map > > user=> (type (f v)) > > clojure.lang.Var$Unbound > > user=> > > > > which would indicate that I could pass an unbound var as the argument to > indicate a "no-value" value, which I can either detect thru the type or the > bound? test. > > > > However, next issue is how to do this in ClojureScript as we do not have > any vars and therefor no unbound vars…? > > > > -FS. > > > > > > On Jan 14, 2013, at 7:07 PM, Frank Siebenlist < > frank.siebenl...@gmail.com> wrote: > > > >> Understood. > >> > >> … but shouldn't it be a standardized constant for the whole community > to use to avoid any interoperability issues and many reinvented wheels? > >> > >> The concept of no-value versus nil is a pretty basic one - there must > be better solutions (re)invented many times over ;-) > >> > >> -FS. > >> > >> > >> On Jan 14, 2013, at 5:23 PM, Timothy Baldridge <tbaldri...@gmail.com> > wrote: > >> > >>> It's fairly common in situations like this to use a namespaced > keyword. For instance ::unknown (which is short for my.namespace/unknown). > >>> > >>> > >>> On Mon, Jan 14, 2013 at 6:06 PM, Frank Siebenlist < > frank.siebenl...@gmail.com> wrote: > >>> I'm using those watcher-fns that get called when the watched ref > changes, and the watcher-fn gets passed the old-value and the new-value. > >>> > >>> Now, nil is a proper value for a key-value and well as a val-value in > a map, so passing nil does not give you the info whether or not an > old-value existed or not, or whether a new-value is nil or no-value. > >>> > >>> With the getter fn: (get m k no-value-here), you have the option to > pass this no-value-here argument which gets returned if there was no value > - this allows you to distinguish nil from "no-value". However, in the > watcher-fn you cannot pass such a no-value argument. > >>> > >>> One possible solution would be to define a well-know URI for the value > of "no-value" - something like for example: "uri: > http://clojure.org/uri/no-value", or some other standardized constant. > >>> > >>> Any other/better suggestions? > >>> > >>> Thanks, FrankS. > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > >>> Groups "Clojure" group. > >>> To post to this group, send email to clojure@googlegroups.com > >>> Note that posts from new members are moderated - please be patient > with your first post. > >>> To unsubscribe from this group, send email to > >>> clojure+unsubscr...@googlegroups.com > >>> For more options, visit this group at > >>> http://groups.google.com/group/clojure?hl=en > >>> > >>> > >>> > >>> -- > >>> “One of the main causes of the fall of the Roman Empire was > that–lacking zero–they had no way to indicate successful termination of > their C programs.” > >>> (Robert Firth) > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > >>> Groups "Clojure" group. > >>> To post to this group, send email to clojure@googlegroups.com > >>> Note that posts from new members are moderated - please be patient > with your first post. > >>> To unsubscribe from this group, send email to > >>> clojure+unsubscr...@googlegroups.com > >>> For more options, visit this group at > >>> http://groups.google.com/group/clojure?hl=en > >> > > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en