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

旧时模样 提交于 2019-12-30 16:18:14

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!