2009-11-05 38 views
7

Ben şöyle moleküler dinamik bazı iş için bir sınıf kuruyorum:Bir initform ne zaman kullanılır?

(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)))) 

Başlangıçta ben nasılsa bir initform yani (getmass ismi) ile Grup tanımına diğer yuvalara atıfta düşündüm - ama bu yanlış olduğu ortaya çıkar (ya da yapar?!?). Bunun yerine, başlangıç ​​durumuna getirme örneğinin, tüm bu başlatma maddelerini yeterince adil bir şekilde yerine getirebileceği söylendi.

Sahip olduğum soru şu, ne zaman: initform kullanılır? Deyimsel tercih nedir? Bunu, (error "...") kodunu oluşturmak için yukarıdaki gibi kullandım ve ayrıca: initarg sağlanmadığında varsayılan argümanları başlatmak için gördüm. Ancak her ikisi de, başlangıç ​​durumuna getirme sırasına kolaylıkla sığdırabilir ve orada daha anlamlı olabilir. Belirli bir yolu var mı: initform genellikle kullanılır?

cevap

4

Genellikle bir kişi şunları kullanır: bir yuvaya varsayılan değer vermek için initform. Defclass ile sadece diğer slotlara dayanarak initforms hesaplayamaz. Başka komplikasyonlar da vardır, yani: initform basit formlar için kullanılmalıdır.

örnekleri

  • 'anahtar fonksiyonu ayarlanmış NIL

  • için bir ekran nesnesindeki pencerelerin listesini ayarlamak 0.0

  • bir 3D-vektör nesnesinin z yuvası ayarlamak 'bir nesneye yuva' # kimlik

  • 'hata bildirimi' hatası oluşacak şekilde 'rapor dizesi' yuvasını ayarlayın

Herhangi bir diğer karmaşık yuva değeri, bir yöntemde yapılmalıdır. Eğer MAKE-INSTANCE sonra otomatik olarak ayarlanması gerekiyorsa: INITIALIZE-INSTANCE için bir AFTER yöntemi kullanın.

2

Bazı şeyleri daha da karmaşıklaştırmak için :default-initargs sınıf seçeneği de vardır. yuvası :initarg olmadığında

şahsen initialize-instance bir sonrası yöntemin tam güç gerekmediğinde kısayol olarak :default-initargs ve :initform kullanın ve :initform.

İlgili konular