开发者

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

开发者 https://www.devze.com 2023-01-25 16:14 出处:网络
I would like 开发者_如何转开发to see if a symbol has been \"def\" ed, but I can\'t see any ifdef syntaxuser> (resolve \'foo)

I would like 开发者_如何转开发to see if a symbol has been "def" ed, but I can't see any ifdef syntax


user> (resolve 'foo)
nil
user> (def foo 3)
#'user/foo
user> (resolve 'foo)
#'user/foo


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)


Can use find-var for this

(bound? (find-var 'user/y))
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号