SORU
31 Mayıs 2011, Salı


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
31 Mayıs 2011, Salı


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.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • Migs351

    Migs351

    3 HAZİRAN 2007
  • Crossover

    Crossover

    18 HAZİRAN 2007