मुझे लगता है कि यह काफी पुराना है, लेकिन मुझे लगता है कि सबसे महत्वपूर्ण बात यहाँ किए जाने के लिए है:
slot-value
उस तरह का प्रयोग न करें!
आदेश एक्सेसर पाने के लिए, :accessor
या :reader
स्लॉट विकल्पों का उपयोग, और निर्माता के लिए मान पास करने के लिए, का उपयोग :initarg
:
(defclass foo()
((bar :accessor foo-bar :initarg :bar)))
इसका मतलब यह है: एक गेटर विधि और एक setf विस्तारक नामित बनाने foo-bar
, और इस स्लॉट के मान को आरंभ करने के लिए :bar
से make-instance
नामक एक कीवर्ड तर्क का उपयोग करें।
(make-instance 'foo :bar "quux")
या, यदि आप initargs की संपत्ति की सूची प्राप्त (के रूप में रेनर पहले से ही पता चला था):
अब आप इस तरह इस तरह के एक वस्तु का दृष्टांत कर सकते हैं
(let ((initargs (list :bar "quux"))) ; getting this from somewhere
(apply #'make-instance 'foo initargs))
फिर आप प्राप्त कर सकते हैं इस तरह मूल्य:
(foo-bar some-foo)
और setf
हमेशा की तरह के साथ सेट:
(setf (foo-bar some-foo) "wobble")
आप :reader
बजाय :accessor
उपयोग करते हैं, की स्थापना की अनुमति नहीं है। यह अपरिवर्तनीयता के इरादे को संवाद करने के लिए अक्सर उपयोगी होता है।
Slot-value
वास्तव में किसी ऑब्जेक्ट के जीवनकाल में विशेष स्थितियों के लिए है, जैसे initialize-instance
के तरीकों के साथ खेलते समय। यह एक उन्नत विषय है।
ग्रेट उत्तर। धन्यवाद। – sbenitezb