3.2 Metode Akses Slot
Prosedur make-class menyediakan properti slot yang menghasilkan metode untuk membaca dan menulis slot. Jika sebuah accessor diminta, sebuah metode secara otomatis dihasilkan untuk membaca nilai slot. Jika sebuah modifier diminta, sebuah metode secara otomatis dihasilkan untuk menyimpan nilai ke dalam slot. Ketika accessor atau modifier ditentukan untuk sebuah slot, prosedur generik tempat metode yang dihasilkan tersebut berada ditentukan secara langsung. Prosedur yang ditentukan untuk accessor mengambil satu argumen, yaitu instance. Prosedur yang ditentukan untuk modifier mengambil dua argumen, yaitu instance dan nilai baru, dalam urutan tersebut.
Semua prosedur yang dijelaskan di sini memberikan sinyal kesalahan tipe condition-type:no-such-slot jika kelas atau objek yang diberikan tidak memiliki slot dengan nama yang diberikan.
Metode akses slot dapat dihasilkan oleh prosedur slot-accessor-method, slot-modifier-method, dan slot-initpred-method. Metode-metode ini dapat ditambahkan ke prosedur generik dengan melewatkannya sebagai argumen ke add-method. Metode yang dihasilkan oleh prosedur ini setara dengan metode yang dihasilkan oleh properti slot di make-class.
Prosedur: slot-accessor-method class name
Mengembalikan metode accessor untuk slot name di class. Metode yang dikembalikan memiliki satu argumen yang diperlukan, yaitu instance dari class, dan specializer untuk argumen tersebut adalah class. Ketika dipanggil, metode tersebut mengembalikan isi slot yang ditentukan oleh name dalam instance; jika slot tidak diinisialisasi, sebuah kesalahan tipe condition-type:uninitialized-slot akan diberikan sinyal.
(define-generic get-bar (object))
(add-method get-bar
(slot-accessor-method <foo> 'bar))
Prosedur: slot-modifier-method class name
Mengembalikan metode modifier untuk slot name di class. Metode yang dikembalikan memiliki dua argumen yang diperlukan, yaitu instance dari class dan sebuah objek. Specializer untuk argumen pertama adalah class dan argumen kedua tidak dispesialisasikan. Ketika dipanggil, metode tersebut menyimpan argumen kedua ke dalam slot yang ditentukan oleh name dalam instance.
(define-generic set-bar! (object bar))
(add-method set-bar!
(slot-modifier-method <foo> 'bar))
Prosedur: slot-initpred-method class name
Mengembalikan metode predikat "inisialisasi?" untuk slot name di class. Metode yang dikembalikan memiliki satu argumen yang diperlukan, yaitu instance dari class, dan specializer untuk argumen tersebut adalah class. Ketika dipanggil, metode tersebut mengembalikan #t jika slot yang ditentukan oleh name telah diinisialisasi dalam instance; jika tidak, metode tersebut mengembalikan #f.
(define-generic has-bar? (object))
(add-method has-bar?
(slot-initpred-method <foo> 'bar))