यह मेरे साथ बार-बार होता है: मैं कक्षा को परिभाषित करता हूं और भूल जाता हूं कि मैं इसे मजेदार बनाना चाहता हूं या कहता हूं, जीटीके विजेट क्लास, इस प्रकार मेटाक्लास को बताया जाना चाहिए। एक बार यह परिभाषित हो जाने के बाद, एसबीसीएल मुझे मुझे मेटाक्लास को बदलने नहीं देता है (भले ही इस वर्ग का कोई उदाहरण न हो)। उदाहरण के लिए,कक्षा के मेटाक्लास को कैसे बदलें
(defclass foo()
((slot-a)))
का मूल्यांकन और फिर एक metaclass जोड़ने और फिर से मूल्यांकन करने: त्रुटि में
(defclass foo()
((slot-a))
(:metaclass gobject:gobject-class))
परिणाम:
Cannot CHANGE-CLASS objects into CLASS metaobjects.
[Condition of type SB-PCL::METAOBJECT-INITIALIZATION-VIOLATION]
See also:
The Art of the Metaobject Protocol, CLASS [:initialization]
दुर्भाग्य से मैं कला की एक प्रति की जरूरत नहीं है मेटाबोजेक्ट प्रोटोकॉल का यह जांचने के लिए कि यह क्या कहता है। अभी के लिए एकमात्र तरीका मैं समझ सकता हूं कि लिस्प को पुनरारंभ करना है, जो काफी विघटनकारी हो सकता है।
चूंकि मुझे जल्द ही त्रुटि का एहसास हुआ है, इसलिए मुझे परिभाषित कक्षा को पूरी तरह से हटाकर ध्यान में रखना नहीं है। प्रश्न:
- यदि मैंने कक्षा के उदाहरण बनाए हैं, तो क्या उन्हें खोजने और उन्हें जीसीड प्राप्त करने का कोई तरीका है?
- कक्षा को कैसे हटाएं? कार्यों के लिए
fmakunbound
की तरह कुछ।