clojure में, एक मूल्य के आम तौर पर दो तरीकों में से एक में ही है:
स्थानीय लोगों, एक नाम स्थान क्वालीफायर के बिना (आमतौर पर एक let
बयान में या fn
/loop
तर्क)
यह उन मानों के लिए है जिन्हें ब्लॉक के दायरे से बाहर संदर्भित नहीं किया गया है (सिवाय इसके कि उन्हें एक func के लिए तर्क के रूप में प्रदान किया गया है ब्लॉक के अंदर या ब्लॉक के वापसी मूल्य में टयन)।
वार्स, नाम स्थान गुंजाइश के साथ, आम तौर पर def
का उपयोग कर (या defn
की तरह एक माध्यमिक मैक्रो)
यह मान जो नाम स्थान गुंजाइश है, जो भी आप नाम स्थान का उपयोग कर सकते एक्सेस किया जा सकेगा पर सुलभ होना चाहिए के लिए है। इस कोड को वर मौजूद है में
user> (declare foo)
#'user/foo
user> (foo)
IllegalStateException Attempting to call unbound fn: #'user/foo clojure.lang.Var$Unbound.throwArity (Var.java:43)
:
त्रुटि declare
का उपयोग कर एक वर बनाने के लिए, और फिर एक सच्चे परिभाषा प्रदान किए बिना यह बुला के कारण होता है (एक अबाध fn कॉल करने के लिए कोशिश कर रहा है) (declare
ने इसे बनाया), लेकिन कोई मूल्य असाइन नहीं किया गया है।
user> (defn foo [] "OK")
#'user/foo
user> (foo)
"OK"
user>
कहीं, अपने कोड का कुछ हिस्सा या लाइब्रेरी का उपयोग कर रहे एक वर की घोषणा की है की कोड है, जो एक प्रतिदेय मूल्य के लिए बाध्य किया जाना चाहिए: तो तुम बंधन, एक वर बाध्यकारी सीरियल में की जरूरत है , लेकिन ठीक से शुरू नहीं किया गया है। क्या लाइब्रेरी में init
फ़ंक्शन है जिसे आपने कुछ नहीं कहा है? हो सकता है कि परिभाषा दिखाई देने से पहले आपको एक नामस्थान की आवश्यकता हो?
कोड को देखे बिना जानना मुश्किल है। – Chiron