उदाहरण के लिए आप फ़ॉन्ट आकार नामकरण करना चाहते हैं:
(defconstant +large+ 3)
(defconstant +medium+ 2)
(defconstant +small+ 1)
आपको लगता है कि कम करने के लिए एक मैक्रो लिख सकते हैं।
ऊपर की परिभाषाओं को ऊपर आमतौर पर लिखा जाता है जब इन नंबरों को कुछ बाहरी गैर-लिस्प कोड में पारित करने की आवश्यकता होती है।
अन्यथा कोई केवल कीवर्ड प्रतीकों का उपयोग करेगा:: बड़ा,: मध्यम और: छोटा।
आप उन्हें ईक्यू और समानता के लिए कुछ परीक्षणों का उपयोग करने वाले सभी परीक्षणों का परीक्षण कर सकते हैं।
(let ((size :medium))
(ecase size
(:small ...)
(:medium ...)
(:large ...)))
आप भी इसे करने के लिए तरीके लिख सकते हैं: जैसा कि बताया जा आप एक सेट के प्रकार को परिभाषित कर सकता है
(defmethod draw-string (message x y (size (eql :large))) ...)
:
(deftype size() '(member :small :medium :large))
तो फिर तुम देख सकते हैं कि कुछ उन दोनों में से किसी है:
(let ((my-size :medium))
(check-type my-size size))
ऊपर अगर मेरा आकार एक में से एक नहीं है तो एक त्रुटि सिग्नल करें: छोटा,: मध्यम या: बड़ा।
तुम भी एक defclass रूप में प्रकार का उपयोग कर सकते हैं:
(defclass vehicle()
((width :type size :initarg :width)))
अब तुम यहाँ की तरह वस्तुओं को बनाने होगा: जब आप कुछ करने के लिए स्लॉट सेट
(make-instance 'vehicle :width :large)
कुछ कॉमन लिस्प कार्यान्वयन की जाँच करेगा अवैध मूल्य
यदि अब आप कक्षा वाहन की वस्तुएं बनाते हैं, तो स्लॉट इनमें से एक होगा: बड़ा, मध्यम या छोटा। यदि आप किसी डिबगर, इंस्पेक्टर या किसी अन्य टूल में ऑब्जेक्ट देखते हैं तो आपको प्रतीकात्मक नाम दिखाई देंगे, न कि 1, 2 या 3 (या जो भी मान आप सामान्य रूप से उपयोग करेंगे)।
यह लिस्प शैली का हिस्सा है: जब संभव हो तो प्रतीकात्मक नामों का उपयोग करें। इंटरफ़ेस कोड में केवल विदेशी कार्यों में संख्या मानों के साथ प्रतीकों का उपयोग करें (जैसे बाहरी सी कोड को कॉल करना जो enums का उपयोग करता है)।
हां, लेकिन बेहतर कीवर्ड का उपयोग करें। – kmkaplan
यह एक अच्छा मुद्दा है: कीवर्ड का उपयोग करके आप इस बारे में चिंता करने से बचें कि आपके प्रतीक किस पैकेज में हैं। –
असल में, सामान्य कार्य केवल कक्षाओं पर विशेषज्ञ हो सकते हैं, मनमाना प्रकार नहीं। –