Ruby'deki attr_accessor
ı anlamakta zorlanıyorum. Biri bana bunu açıklayabilir mi?
attr_accessor sadece bir yöntemdir. (Bağlantı, nasıl çalıştığına dair daha fazla fikir vermelidir - oluşturulan yöntem çiftlerine bakın ve bir öğretici size nasıl kullanılacağını göstermelidir).
İşin püf noktası class
Ruby'de bir tanım değildir (C++ ve Java gibi dillerde "sadece bir tanımdır"), fakat değerlendirilen bir ifadedir. Bu değerlendirme sırasında attr_accessor
metodu çağrılır ve bu da mevcut sınıfı değiştirir - örtük alıcıyı hatırlayın: self.attr_accessor
, burada self
bu noktada "open" sınıf nesnesidir.
attr_accessor` ve arkadaşlarına duyulan ihtiyaç, şey:
Ruby, Smalltalk gibi, örnek değişkenlere o nesne için metotlar1 dışında erişilmesine izin vermez. Yani, örnek değişkenlere Java ve hatta Python'da olduğu gibi x.y
şeklinde erişilemez. Rubyde
yher zaman gönderilecek bir mesaj (veya "çağrılacak metod") olarak alınır. Böylece
attr_*metodları, dinamik olarak yaratılan metodlar aracılığıyla
@variable` örneğine erişimi vekilleyen sarmalayıcılar yaratır.
Boilerplate berbat
Umarım bu bazı küçük ayrıntıları açıklığa kavuşturur. Mutlu kodlamalar.
1 Bu tam olarak doğru değildir ve bunun etrafında bazı "teknikler" vardır, ancak "public instance variable" erişimi için sözdizimi desteği yoktur.