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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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