سؤال

يمكن لأي CL بوار يرجى شرح "فتحات" في كلوس?أنا أجد صعوبة في فهم جزء بعد فتحة اسم.في :

(defclass فو () (data1 :initarg فو))

ماذا تفعل 'initarg' وغيرها من مثل هذه الأشياء مماثلة يعني ؟ أنا إعادة قراءة كتيبات.لذا أود أن نقدر حقا إذا كان أي من كنت هنا يمكن أن يفسر ذلك أن المواطن العادي مثلي.

وذلك بفضل!

هل كانت مفيدة؟

المحلول

والمثال الخاص بك هو الخطأ قليلا. يجب أن يكون:

(defclass foo ()
   ((data1 :initarg foo)))

لاحظ الأقواس وأضاف أن تشير إلى وجود قائمة من الأوصاف الفتحة.

وDEFCLASS يأخذ قائمة من فتحات. حتى مع اثنين من فتحات لدينا:

(defclass foo ()
   ((data1 :initarg :data1arg
           :initform (random 1.0) 
           :type number
           :documentation "doc here"
           :accessor foo-data1-acc)
    (data2 :initarg :data2arg)))

وDATA1 هو اسم الفتحة. وراء أن تجد زوجا من: قيمة الكلمة

و: INITARG يخبرك ما المعلمة لمستحضرات مثيل.     (جعل مثيل "فو: data1arg 10)؛ بإنشاء الكائن ويحدد DATA1 فتحة إلى 10. عادة يجب عليك استخدام رمز الكلمة الرئيسية (مثل: data1arg هنا).

و: INITFORM يحدد فتحة افتراضيا، عند إنشاء الكائن. كما هو الحال في:     (جعل مثيل "فو)؛ بإنشاء الكائن. يتم تعيين فتحة لقيمة initform.

و: يحدد نوع نوع الكائن فتحة في

و: الوثائق هو مجرد سلسلة ل، حسنا، وثائق

.

و: يحدد استرجاع وظيفة القراءة والكتابة فتحة

.
(foo-data1-acc some-foo-object-here)             ; read
(setf (foo-data1-acc some-foo-object-here) 7)    ; write

لاحظ أنه يمكنك كتابة أزواج في أي أمر ويمكنك أيضا تحديد وظائف استرجاع متعددة. وهناك أيضا: وظائف WRITER

: READER و.

ومع CLOS يمكنك تحديد كل ما في الماكرو DEFCLASS. لا يتم إنشاء هذه الأمور تلقائيا كما هو الحال في defstruct، التي لديها تدوين أقصر.

ووصف DEFCLASS هنا هو: DEFCLASS . قصيرة CLOS مقدمة .

نصائح أخرى

في فتحة المواصفات العامة الجملة (فتحة-اسم [فتحة-الخيار خيار القيمة]...).أساسا-authoritatiev الإشارة على HyperSpec الصفحة على defclass, لكن باختصار:

:قارئ وظيفة قراءة قيمة فتحة
:كاتب وظيفة كتابة قيمة فتحة
:accessor وظيفة القراءة و (عبر SETF) تعيين قيمة فتحة
:initarg رمز لضبط فتحة قيمة من جعل سبيل المثال

هناك المزيد ولكن هذا هو أربعة أنا في الغالب استخدام (في الواقع, أنا في الغالب استخدام :initarg واحد :accessor أو :القارئ).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top