2010-06-07 13 views
9

क्या मुझे क्लोजर कीवर्ड बनाने के बारे में सावधान रहना चाहिए जिनके पास अस्तित्वहीन नाम नहीं हैं?क्या एक गैर-मौजूद नामस्थान में नेमस्पेसिंग क्लोजर कीवर्ड के साथ कोई समस्या है?

एक उदाहरण होगा: foo/bar, जहां नेमस्पेस foo वास्तव में मौजूद नहीं है। ऐसा संभव लगता है क्योंकि ये कीवर्ड अक्षर की तरह व्यवहार करते हैं। मुझे आरईपीएल में ऐसा करने में कोई समस्या नहीं मिली, लेकिन मैं एओटी संकलन के साथ संभावित समस्याओं के बारे में चिंतित हूं।

+1

मैंने अतीत में कुछ चीजों के लिए यह किया है और इसमें कोई समस्या नहीं है। –

उत्तर

7

एक नाम स्थान तथ्य में बस नहीं बनाया जाएगा क्योंकि किसी कीवर्ड या प्रतीक का सामना करना पड़ा है जो यह करने के लिए "संबंधित" होता है, एक ताजा आरईपीएल पर निम्न बातचीत के रूप में दिखाता है:

; SLIME 2010-05-06 
user> (-> (.getNamespace :user/foo) symbol) 
user 
user> (-> (.getNamespace :user/foo) symbol the-ns) 
#<Namespace user> 
user> (-> (.getNamespace :bar/foo) symbol the-ns) 
; java.lang.Exception: No namespace: bar found 

हालांकि, इस चिंता का कोई कारण नहीं है। एक कीवर्ड या प्रतीक का "नेमस्पेस" फ़ील्ड सिर्फ एक इंटर्न वाली स्ट्रिंग है; कोई भी मौजूद है, भले ही संबंधित नेमस्पेस ऑब्जेक्ट में कोई संदर्भ न हो। वास्तव में, जैसा ऊपर देखा जा सकता है, .getNamespace कीवर्ड और प्रतीकों की विधि एक स्ट्रिंग लौटाती है और उसे उस से वास्तविक नामस्थान प्राप्त करने के लिए कुछ हॉप कूदना पड़ता है।

resolve फ़ंक्शन के साथ नामस्थान-योग्य प्रतीक को हल करने का प्रयास करना भी सुरक्षित है। इस पर ध्यान दिए बिना कि नामस्थान वास्तव में मौजूद है या नहीं; यदि ऐसा नहीं होता है, तो nil लौटा दिया गया है, जैसा कि यह मौजूद है, लेकिन दिए गए नाम का कोई वारा नहीं है। इसके विपरीत, ns-resolve, इसके विपरीत, उपरोक्त आरईपीएल से स्निपेट में उल्लिखित एक अपवाद फेंक देगा अगर उसे दिया गया नामस्थान नहीं मिल रहा है।

संबंधित मुद्दे