В ближайшем будущем, как я могу проверить, был ли определен символ? - PullRequest
22 голосов
/ 16 ноября 2010

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

Ответы [ 3 ]

28 голосов
/ 16 ноября 2010
user> (resolve 'foo)
nil
user> (def foo 3)
#'user/foo
user> (resolve 'foo)
#'user/foo
8 голосов
/ 05 февраля 2011

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

РЕДАКТИРОВАТЬ: согласно комментарию MayDaniel, это не совсем то, что вы просили, но он доставит вас туда. Вот реализация bounded? (вероятно, не лучшее название):

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

user> (map bounded? ['a 'b 'c])
(true false false)
3 голосов
/ 07 февраля 2011

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

(bound? (find-var 'user/y))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...