在clojure中,我如何测试是否已定义符号?

时间:2010-11-16 20:20:16

标签: clojure

我想知道符号是否已被“def”修改,但我看不到任何ifdef语法

3 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:8)

resolvens-resolve可以做您想要的事情:

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

获得布尔值:

user> (boolean (resolve 'b))
true
编辑:根据MayDaniel的评论,这不是你要求的,但它会让你到那里。这是bounded?的实现(可能不是最好的名字):

(defn bounded? [sym]
  (if-let [v (resolve sym)]
    (bound? v)
    false))

user> (map bounded? ['a 'b 'c])
(true false false)

答案 2 :(得分:3)

可以将find-var用于此

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