问题
I would like to see if a symbol has been "def" ed, but I can't see any ifdef syntax
回答1:
user> (resolve 'foo)
nil
user> (def foo 3)
#'user/foo
user> (resolve 'foo)
#'user/foo
回答2:
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)
回答3:
Can use find-var for this
(bound? (find-var 'user/y))
来源:https://stackoverflow.com/questions/4198549/in-clojure-how-can-i-test-if-a-a-symbol-has-been-defined