2009-11-05 24 views
7

मैं इस प्रकार आणविक गतिशीलता पर कुछ काम के लिए एक वर्ग बनाने हूँ:जब एक initform प्रयोग किया जाता है?

(defclass %atom (particle) 
    ((name :initarg :name :initform (error "Every atom in the system must have a name!")) 
    (mass :accessor mass :initarg :mass :initform (getmass name)) 
    (charge :accessor charge :initarg :charge :initform (getcharge name)))) 

शुरू में मैंने सोचा था कि मैं किसी भी तरह एक initform यानी (getmass नाम) के साथ वर्ग परिभाषा के दायरे में अन्य स्लॉट का उल्लेख कर सकते हैं - लेकिन यह है कि असत्य होने के लिए बाहर निकलता है (या यह करता है?!?)। इसके बजाय, मुझे बताया गया है कि कर रहा हूँ प्रारंभ-उदाहरण के सभी कि प्रारंभ सामान डालने के लिए जगह होगी ... पर्याप्त निष्पक्ष।

सवाल मैं, तब, जब जाता है है initform इस्तेमाल किया? मूर्खतापूर्ण वरीयता क्या है? मैंने देखा है यह (त्रुटि "...") कोड पैदा करने के लिए के रूप में ऊपर का इस्तेमाल किया, और यह भी डिफ़ॉल्ट तर्क प्रारंभ करने में एक जब: initarg प्रदान नहीं की है। लेकिन वे दोनों आसानी से प्रारंभिक उदाहरण में फिट हो सकते हैं और वहां और अधिक समझ सकते हैं। क्या कोई विशेष तरीका है: आमतौर पर इनिटफॉर्म का उपयोग किया जाता है?

उत्तर

4

आमतौर पर एक का प्रयोग करेंगे: initform एक स्लॉट कुछ डिफ़ॉल्ट मान देने के लिए। डिफक्लास के साथ कोई अन्य स्लॉट्स के आधार पर इनिटफॉर्म की गणना नहीं कर सकता है। अन्य जटिलताओं भी हैं, इसलिए: सरल रूपों के लिए initform का उपयोग किया जाना चाहिए।

उदाहरण

  • 0,0

  • शून्य

  • 'कुंजी समारोह स्थापित करने के लिए एक स्क्रीन वस्तु में खिड़कियों की सूची सेट करने के लिए एक 3 डी-वेक्टर वस्तु की जेड स्लॉट सेट 'ऑब्जेक्ट में # ऑब्जेक्ट में' स्लॉट

  • त्रुटि रिपोर्ट में 'रिपोर्ट स्ट्रिंग' स्लॉट सेट करें "त्रुटि हुई"

किसी अन्य विधि में स्लॉट मानों का कोई भी जटिल सेट अप किया जाना चाहिए। यदि ऑब्जेक्ट का उपयोग करने के बाद ऑब्जेक्ट को स्वचालित रूप से सेट अप करने की आवश्यकता होती है: INITIALIZE-INSTANCE के लिए विधि के बाद।

2

बातें एक छोटा सा आगे को मुश्किल करने के लिए, वहाँ भी वर्ग विकल्प :default-initargs है।

व्यक्तिगत तौर पर मैं शॉर्टकट के रूप में :default-initargs और :initform का उपयोग करते हैं की जरूरत नहीं है initialize-instance के लिए एक के बाद विधि की पूरी शक्ति, और :initform जब स्लॉट एक :initarg जरूरत नहीं है।

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