Metode instance didefinisikan di dalam blok definisi kelas. Metode kelas didefinisikan sebagai metode singleton pada kelas singleton suatu kelas, juga secara informal dikenal sebagai "metaclass" atau "eigenclass". private
bukan kata kunci, tetapi metode ( Modul # pribadi ).
Ini adalah panggilan ke metode self#private
/ A#private
yang "mengaktifkan" akses pribadi untuk semua definisi metode instance yang akan datang hingga beralih sebaliknya:
class A
private
def instance_method_1; end
def instance_method_2; end
# .. and so forth
end
Seperti disebutkan sebelumnya, metode kelas benar-benar metode tunggal yang didefinisikan pada kelas tunggal.
def A.class_method; end
Atau menggunakan sintaks khusus untuk membuka tubuh definisi dari kelas A anonim, tunggal:
class << A
def class_method; end
end
Penerima "pesan pribadi" - diri di dalam class A
adalah objek kelas A. diri di dalam class << A
blok adalah objek lain, kelas singleton.
Contoh berikut ini pada kenyataannya memanggil dua metode berbeda yang disebut pribadi , menggunakan dua penerima atau target yang berbeda untuk panggilan tersebut. Pada bagian pertama, kita mendefinisikan metode instance privat ("pada kelas A"), pada yang kedua kita mendefinisikan metode kelas privat (sebenarnya metode singleton pada objek kelas singleton dari A).
class A
# self is A and private call "A.private()"
private def instance_method; end
class << self
# self is A's singleton class and private call "A.singleton_class.private()"
private def class_method; end
end
end
Sekarang, tulis ulang contoh ini sedikit:
class A
private
def self.class_method; end
end
Bisakah Anda melihat kesalahan [yang dilakukan desainer bahasa Ruby]? Anda beralih pada akses pribadi untuk semua metode instance A yang akan datang, tetapi lanjutkan untuk mendeklarasikan metode singleton pada kelas yang berbeda, kelas singleton.