Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In clojure how can I test if a a symbol has been defined?

Tags:

I would like to see if a symbol has been "def" ed, but I can't see any ifdef syntax

like image 711
yazz.com Avatar asked Nov 16 '10 20:11

yazz.com


2 Answers

user> (resolve 'foo) nil user> (def foo 3) #'user/foo user> (resolve 'foo) #'user/foo 
like image 107
Michiel Borkent Avatar answered Oct 06 '22 23:10

Michiel Borkent


resolve or ns-resolve may do what you're looking for:

user> (def a 1) #'user/a user> (def b) #'user/b user> (resolve 'a) #'user/a user> (resolve 'b) #'user/b user> (resolve 'c) nil 

To get a boolean:

user> (boolean (resolve 'b)) true 

EDIT: per MayDaniel's comment, this isn't exactly what you asked for, but it will get you there. Here's an implementation of bounded? (probably not the best name):

(defn bounded? [sym]   (if-let [v (resolve sym)]     (bound? v)     false))  user> (map bounded? ['a 'b 'c]) (true false false) 
like image 22
Justin Kramer Avatar answered Oct 06 '22 23:10

Justin Kramer