Подтвердить что ты не робот

В clojure как я могу проверить, был ли определен символ?

Я хотел бы увидеть, был ли символ "def" ed, но я не вижу никакого синтаксиса ifdef

4b9b3361

Ответ 1

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

Ответ 2

resolve или ns-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

EDIT: за комментарий MayDaniel, это не совсем то, что вы просили, но он доставит вас туда. Здесь реализация bounded? (возможно, не лучшее имя):

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

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

Ответ 3

Может использовать find-var для этого

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