Neden't eigenclass çok benzeyen bu zaman self.class eşdeğer değil mi?...
Neden't eigenclass çok benzeyen bu zaman self.class eşdeğer değil mi?
Bir yere not özledim, ve bunu bana izah edersin umarım.
Neden bir nesne self.class farklı eigenclass?
class.self ile eigenclass bir tutan mantık zincirimi oldukça basittir:
class << self Sınıf yöntemleri yerine, örnek yöntemleri bildirmek için bir yoldur. def Foo.bar bir kısayol.
Sınıf nesnesine başvuru içinde, self dönen 10 ** aynı olmalıdır. Bu class << self sınıf yöntemleri/özellikler tanımı Foo.class 12 *set olmasıdır.
Sadece ben şaşkın mıyım? Ya da, bu Yakut sinsi bir hile meta-programlama?
class << self sınıf yöntemleri bu şekilde kullanılabilir olsa) ilan sadece bir yol daha vardır. Muhtemelen bazı kullanım gibi gördüm:
Bu çalışır ve def Foo.a eşdeğer ama çalışma şekli biraz ince. Gizli self Bu bağlamda, nesne anlamına gelir. Class benzersiz, anonim bir alt sınıfı olan Foo,. Bu alt 20 **'ler denireigenclass. def a yeni bir yöntem a denilen oluşturur bu yüzden Foo'In eigenclass, normal yöntem çağrısı sözdizimi tarafından erişilebilir: Foo.a.
Şimdi farklı bir örneğe bakalım:
return self   "d"
Bu örnek, ilk başta söylemek zor olsa da aynı zamanda. frob, str, String eşsiz bir anonim sınıfının eigenclass String sınıf değil, ama tanımlanır. str frob bir yöntemi vardır, ama genel olarak String örnekleri. Ayrıca Dize geçersiz kılınmış yöntemler () bazı zor test senaryoları çok yararlı olabilir.
Şimdi orijinal örnek anlamak için donanımlı değiliz. Foo'nın başlatma yöntemi, self bazı özel ders 35 ** değil, ama anlamına gelir . içinde ^em>örnekFoo. Onun eigenclass Foo, bir alt sınıfıdır ama Foo; olamaz, yoksa ikinci örnekte gördüğümüz hile işe yaramaz değildir. Örnek devam etmek için:
Raylar, iki tarih ar...
Denetler sınıf kütüp...