2010-11-16 67 views

回答

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

辉煌,曾第一次。谢谢! :) – Zubair 2010-11-16 20:53:48

6

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) 
+1

那么,没有。 'b已经解决,但它没有约束。这不是提问者想要的。 – MayDaniel 2011-02-05 18:12:41

+1

你是对的。修改 – 2011-02-05 18:33:53

+0

我认为实际上需要“真”和“假”是很少见的。因为如果符号被绑定,'resolve'返回一个真值,而一个虚假的值'nil',如果它没有绑定,通常可以使用'resolve'原样。 '(if(resolve'c)“符号被绑定,伙计。”“Whaa ??那个符号没有绑定!”) – Mars 2016-09-20 23:24:20

2

可以使用发现-VAR这个

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

如果'y'在'user'中被绑定,返回空指针异常,因为'find- var'在这种情况下返回'nil'。 – Mars 2016-09-20 23:20:42

相关问题