2010-11-16 4 views

Antwort

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

Brilliant arbeitete ersten Mal. Vielen Dank! :) – Zubair

6

resolve oder ns-resolve kann tun, was Sie suchen nicht sehen:

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:

Um einen boolean zu erhalten pro MayDaniel Kommentar, das ist nicht genau das, was Sie gefragt, aber es wird Sie dort ankommen. Hier ist eine Implementierung von bounded? (wahrscheinlich nicht der beste Name):

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

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

Nun, nein. 'b ist gelöst, aber es ist ungebunden. Das ist nicht das, was der Fragesteller will. – MayDaniel

+1

Sie haben Recht. Überarbeitete –

+0

Ich denke, es wäre selten, dass man tatsächlich "wahr" und "falsch" brauchen würde. Da "resolve" einen truthigen Wert zurückgibt, wenn das Symbol gebunden ist, und einen falschen Wert "nil", wenn es nicht gebunden ist, könnte man oft "resolve" verwenden, wie es ist. '(if (resolve 'c)" Das Symbol ist gebunden, Mann. "" Whaa ?? Dieses Symbol ist ungebunden! ")' – Mars

2

verwenden können, finden-var für dieses

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

Dies gibt eine Nullzeigerausnahme zurück, wenn 'y' in' user' nicht gebunden ist, weil 'find- var 'gibt in diesem Fall' nil' zurück. – Mars

Verwandte Themen