2010-11-16 97 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

相關問題