SORU
6 Aralık 2010, PAZARTESİ


Ruby attr_accessor nedir?

Zor zamanlar Ruby attr_accessors anlayış yaşıyorum, biri bana açıklayabilir mi? Google aramaları ton yaptım, onları tam olarak anlayamıyoruz.

CEVAP
6 Aralık 2010, PAZARTESİ


Hadi 7* *bir sınıf olduğunu varsayalım.

class Person
end

person = Person.new
person.name # => no method error

Açıkçası biz hiç yöntem name tanımlanmış. Bunu yapmayalım.

class Person
  def name
    @name # simply returning an instance variable @name
  end
end

person = Person.new
person.name # => nil
person.name = "Dennis" # => no method error

Aha, adını okuyabiliriz, ama isim vermemiz anlamına gelmez. Bu iki farklı yöntem vardır. Eski aradıokuyucuve ikinci aradıyazar. Yazar oluşturmak henüz öyle yapalım yani biz yapmadık.

class Person
  def name
    @name
  end

  def name=(str)
    @name = str
  end
end

person = Person.new
person.name = 'Dennis'
person.name # => "Dennis"

Harika. Şimdi ve örnek değişken @name okuyucu ve yazar yöntemlerini kullanarak okuma yazma yapabiliriz. Bu yüzden sık sık yapılır dışında, neden bu yazma yöntemleri her zaman harcıyorsun? Daha kolay yapabiliriz.

class Person
  attr_reader :name
  attr_writer :name
end

Hatta bu tekrarlayan alabilirsiniz. İstediğiniz zaman hem okuyucu ve yazar sadece erişimci kullanın!

class Person
  attr_accessor :name
end

person = Person.new
person.name = "Dennis"
person.name # => "Dennis"

Aynı şekilde çalışır! Ve tahmin edin ne oldu: örnek değişkeni bizim kişi @name nesne elle yaptığımız gibi ayarlanır, diğer yöntemleri kullanabilirsiniz.

class Person
  attr_accessor :name

  def greeting
    "Hello #{@name}"
  end
end

person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"

İşte bu kadar. attr_reader, attr_writer attr_accessor yöntem aslında senin için yöntemler oluşturmak nasıl anlamak için, diğer cevaplar, kitaplar, ruby docs okuyun.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ☆ SUB4SUB CENTER! ☆ spam here

    ☆ SUB4SUB

    22 ŞUBAT 2010
  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • SignatureSeries

    SignatureSer

    24 Aralık 2006