The reason it starts with def (and ends in -fn) is because it is a function used by a macro, which has a global effect.
On Monday, 22 October 2012 11:17:12 UTC-4, Jim foo.bar wrote: > > A couple of issues: > > 1) 'name' is a fn in core so it's almost never a good idea to shadow it > like this... > 2) also it is not a good idea for a fn to start with 'def' unless it > actually defines a top-level form inside it like in macros > 3)If you need all your keys in capital I think it would be faster to just > capitalise them without checking...not sure though... > > Jim > > > On 22/10/12 16:09, Bronsa wrote: > > I've had this happening to me too. > Couldn't figure out wtf was going on. > > Until somebody understands what's the problem is, you can(let [s (.sym > ^clojure.lang.Keyword k)] ..) and call name on s > > 2012/10/22 JvJ <kfjwh...@gmail.com <javascript:>> > >> I'm getting a REALLY weird error. I'm trying to check if a set of >> keywords are all uppercase. >> When binding a value to 'res' in the let statement, I traverse a list of >> keywords. However, the calls to the name function on those >> keywords give nil. The debug print statement clearly shows that the >> class of k is a keyword, and yet its name is nil? >> >> I really don't get it. >> >> >> ;; Program >> (defn defrel-fn >> "Adds a relation definition to the *relations* map." >> [name keys] >> (let [res (every? (fn [k] >> (println "k: " (name k) ", " (class k)) ;; Added >> for debugging >> (= (name k) (.toUpperCase (name k)))) keys) >> ;; keys need to be all in uppercase letters! >> ;;_ (when-not res (throw (Exception. "Error. All keys must be >> upper-case."))) >> kns (apply hash-map (mapcat vector keys (range))) ;; represents a >> map of keys to indices >> ] >> (swap! *relations* >> assoc name {:fields kns >> :unfields (vec keys) ;; A map of indices to keys >> is best represented as a vector >> }))) >> >> ;; Output from repl >> => (worldrep.core/defrel-fn 'mother [:SELF :CHILD]) >> k: nil , clojure.lang.Keyword >> NullPointerException clojure.lang.Reflector.invokeNoArgInstanceMember >> (Reflector.java:314) >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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 clo...@googlegroups.com <javascript:> > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+u...@googlegroups.com <javascript:> > 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