SORU
2 NİSAN 2013, Salı


Örnek değişken Ruby sınıfa karşı sınıf değişkeni

When do Ruby instance variables get set? ama sınıf örnek değişkenleri kullanmaya ne zaman karar veremiyorum bu konuyu okudum.
Sınıf değişkenleri sınıfın tüm nesneleri, değişkenleri bir nesneye ait Örnek tarafından paylaşılıyor. çok Değil oda eğer sınıf değişkenleri varsa sınıf örnek değişkenleri kullanmak için sola
Bana bunları kullanmak için ne zaman bu ikisi arasındaki farkı açıklayabilir misiniz? kod örneği:

class S
  @@k = 23
  @s = 15
  def self.s
    @s
  end
  def self.k
     @@k
  end

end
p S.s #15
p S.k #23

Güncelleme
Şimdi, Sınıf, Örnek Değişkenleri kalıtım zinciri geçirilen tasarruf anlıyorum! Herkese teşekkürler!

CEVAP
2 NİSAN 2013, Salı


Bir sınıf örneği değişken:

class Parent
  @things = []
  def self.things
    @things
  end
  def things
    self.class.things
  end
end

class Child < Parent
  @things = []
end

Parent.things << :car
Child.things  << :doll
mom = Parent.new
dad = Parent.new

p Parent.things #=> [:car]
p Child.things  #=> [:doll]
p mom.things    #=> [:car]
p dad.things    #=> [:car]

Sınıf değişkeni:

class Parent
  @@things = []
  def self.things
    @@things
  end
  def things
    @@things
  end
end

class Child < Parent
end

Parent.things << :car
Child.things  << :doll

p Parent.things #=> [:car,:doll]
p Child.things  #=> [:car,:doll]

mom = Parent.new
dad = Parent.new
son1 = Child.new
son2 = Child.new
daughter = Child.new

[ mom, dad, son1, son2, daughter ].each{ |person| p person.things }
#=> [:car, :doll]
#=> [:car, :doll]
#=> [:car, :doll]
#=> [:car, :doll]
#=> [:car, :doll]

Örnek bir sınıf (sınıf örneği) değişken ile alt sınıflar da otomatik olarak onları almak zorunda kalmadan bir şey bu sınıf için ortak (ve tersi) saklayabilirsiniz. Sınıf değişkenleri ile, örnek bir nesneden self.class yazmak zorunda değil kolaylık var, ve arzu (zaman) ayrıca sınıf hiyerarşisini otomatik paylaşımı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DanceOn

    DanceOn

    6 Mayıs 2006
  • RickardRick

    RickardRick

    9 Mart 2007
  • spectragirlz16's channel

    spectragirlz

    22 Ocak 2012