SORU
18 ŞUBAT 2011, Cuma


Neden Ruby'attr_accessor, attr_reader ve attr_writer s?

Ruby kullanışlı ve rahat gibi tuşları kullanarak örnek değişkenleri paylaşmak için bu yolu vardır

attr_accessor :var
attr_reader :var
attr_writer :var

Neden sadece attr_accessor kullanırsam attr_reader attr_writer seçsin? Performans gibi bir şey şüpheliyim olan var mı? Bir nedeni vardır herhalde, yoksa bu anahtarları değil.

CEVAP
18 ŞUBAT 2011, Cuma


Farklı erişenleri birisi kodunuzu okuma niyetinizi iletişim kurmak için kullanın ve daha doğru kamu API denir ne olursa olsun çalışacak bir sınıf yazmak yapabilirsiniz.

class Person
  attr_accessor :age
  ...
end

Burada, hem okuma hem de yaş yazabilirim bunu görebiliyorum.

class Person
  attr_reader :age
  ...
end

Burada, sadece yaş okuma olabilir görebiliyorum. Bu sınıfın yapıcı tarafından ayarlanır ve sabit kalır sonra düşünün. Bir çevirici (yazar) yaş için vardı ve sınıfı yazılı yaş, bir kez ayarlandıktan sonra, değişmez varsayarak olsaydı, o zaman bir hata kodu bu çevirici arama neden olabilir.

Ama perde arkasında neler oluyor?

Eğer yazarsan:

attr_writer :age

Bu çevrilmiş olur:

def age=(value)
  @age = value
end

Eğer yazarsan:

attr_reader :age

Bu çevrilmiş olur:

def age
  @age
end

Eğer yazarsan:

attr_accessor :age

Bu çevrilmiş olur:

def age=(value)
  @age = value
end

def age
  @age
end

Bilerek, burada başka bir yol düşünmek için bile yoktu attr_... yardımcıları, ve yazmak için set kendini yazar mısın artık set daha sınıfınızın gerekli? Örneğin, eğer yaşı okunur olmak gerekirse, aynı zamanda bir yöntem yazılmasına izin yazar mısın?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • esnathesinger

    esnathesinge

    6 NİSAN 2009
  • metal571

    metal571

    30 Mayıs 2006
  • michal lelkowski

    michal lelko

    9 Temmuz 2006