Ruby sınıf mirası: `<<` (küçük çift kişilik)?
class << Awesomeness
Bu 7 ** ne için? Aradım, fakat sonuç sadece dize birleştirme hakkında söyle
CEVAP
class << something
başka birinin dediği gibi tek bir sınıf, sözdizimi doğru olsa da, en sık kullanılan bir sınıf tanımı içinde sınıf yöntemleri tanımlamaktır. Ama bu iki kullanımları tutarlı. Nasıl burada.
Ruby bunu yaparak: belirli bir örneğini yöntemleri ekleyebilirsiniz
class << someinstance
def foo
"Hello."
end
end
Bu bir yöntem foo
, Bu onun sınıf için değil ama belirli bir örneği someinstance ekler. (Aslında, foo "singleton," ama bu daha fazla veya daha az uygulama bir cilvesi.) sınıf örneğinin eklenir Yukarıdaki kodu çalıştırdıktan sonra, yöntem foo someinstance gönderebilirsiniz:
someinstance.foo => "Hello."
ama aynı sınıf diğer örneklerini foo gönderemezsin. <<
nominal için var. Ama insanlar daha sık bu gibi sözdizimsel jimnastik için bu özelliği kullanın:
class Thing
def do_something
end
class << self
def foo
puts "I am #{self}"
end
end
end
Bu kod, bu sınıfın tanımı -- çalıştırır, self
nedir? 15 ** Sınıf. class << self
demek "ders Olayı için aşağıdaki yöntemleri ekleyin." demekle aynıdır. Bu, foo sınıf bir yöntemdir. Yukarıdaki tamamlandıktan sonra, bunu yapabilirsiniz:
t = Thing.new
t.do_something => does something
t.class.foo => "I am Thing"
t.foo => NoMethodError: undefined method `foo'
<<
ne yaptığını düşününce çok mantıklı geliyor. Belirli bir örnek eklemek için bir yol var, ve genel bir durumda, bu örnek için eklenen bir sınıf, blok içinde yöntemler sınıf yöntemleri olur.
Kısa, kısa ve öz bir şekilde sınıf tanım bloğu içinde sınıf yöntemleri oluşturmak. Başka bir şekilde bunu yapmak için:
class Thing
def self.foo
# ...
end
end
Aynı şey. Senin örnek aslında yazım hatası, ama eğer <<
örnekleri ve sınıf sözcüğü ile nasıl kullanıldığını anlamak, düzeltmek için nasıl bileceksiniz.
Ruby'in çift iki nokta üstüste (:...
sınıf << Ruby kendini deyim...
Ruby'de sınıf tüm torunları bak...
Eğer örneği varsa görmek sınıf yöntemi...
() sınıf vs türü() Ruby...