attr_accessor
ile bir sınıfım varsa, varsayılan olarak ilgili alıcılar ve ayarlayıcılarla birlikte bir örnek değişkeni oluşturmaya yarar. Ancak bir örnek değişkeni oluşturmak yerine, bunun yerine bir sınıf değişkeni veya sınıf örneği değişkeni oluşturmanın bir yolu var mı? Bunun gibiRuby's attr_accessor örnek değişkenler yerine sınıf değişkenleri veya sınıf örneği değişkenleri nasıl üretebilir?
cevap
:
class TYourClass
class << self
attr_accessor :class_instance_variable
end
end
Sen (sınıf kendisi bir örnek olduğu) sınıfının metaclass açılması ve ona bir özellik ekleyerek bu bakabilirsiniz.
attr_accessor
, sınıfın Class
bir yöntemidir, bu, sınıfına örnek değişkeni okuyan ve bunu ayarlayan diğer iki yöntem ekler.
class Class
def my_attr_accessor(name)
define_method name do
instance_variable_get "@#{name}"
end
define_method "#{name}=" do |new_val|
instance_variable_set "@#{name}", new_val
end
end
end
Tamamen denenmemiş class özelliğinin erişimci: Rails
class Class
def class_attr_accessor(name)
define_method name do
class_variable_get "@@#{name}"
end
define_method "#{name}=" do |new_val|
class_variable_set "@@#{name}", new_val
end
end
end
Teşekkürler. Sınıfın meta sınıfını açtığını ve bir tür ek niteliği eklediğini söylemenin şeklini seviyorum. Fakat neden bir sınıf değişkeni yerine bir sınıf örneği değişkeni üretiyor? Ayrıca bir sınıf değişkeni üretmeyi de mümkün kılacak mı yoksa bu sözdizimi yalnızca sınıf örneği değişkenleri için çalışacak mı? –
Farklıyım, cevaplara tekrar bakın –
Bu yalnızca sınıf örneği değişkenleri için çalışacaktır, b/c attr_ * örnek değişkenler (bazı nesnelerin) için yöntemleri tanımlar. – rampion
(veya herhangi bir yere require 'active_support'
yapmak) true sınıf değişken erişimcileri almak için cattr_accessor :name
kullanabilirsiniz Burada olası bir uygulama bu.
Başkalarının işaret ettiği sınıf örneği değişkenleri genellikle daha kullanışlıdır. APIdock cattr_accessor
page, biri diğerini istemediğinizi, artı kaynağın cattr_accessor
, cattr_reader
ve cattr_writer
işlevlerini açıklayan bazı yardımcı tartışmalara sahiptir.
çok daha kolay - rayların bunu teklif ettiğini bilmiyordum. Teşekkürler! –
- 1. Ruby Sınıf dışı örnek değişkenleri oluşturma
- 2. Dinamik sınıf değişkenleri
- 3. Java'da sınıf değişkenleri miras alınıyor?
- 4. Sınıf değişkenleri için kullanılabilirlik kontrolü nasıl yapılır
- 5. statik sınıf değişkenleri kullanma - Ben basitleştirilmiş bir sınıf kurdu
- 6. Başka değişken türleri yerine örnek değişkenleri hangi durumlarda kullanmalıyım?
- 7. C++ özel sınıf üyesi değişkenleri aşağıdaki gibi
- 8. Sınıf tanımında Oluşturucu VS'de değişkenleri ayarlama
- 9. list Rails denetleyici örneği değişkenleri
- 10. Geçici kullanım için django model örneği değişkenleri
- 11. nasıl sınıf değişkenleri bir demet yapmak gerekir dinamik piton
- 12. Örnek değişkenleri ve yerel değişkenlerin varsayılan değerleri
- 13. sınıf örneği örneği
- 14. Geçiş değişkenleri()
- 15. sınıf statik üye değişkenler
- 16. Sıvı şablonlarında örnek örnek yöntemlerine geçirme değişkenleri
- 17. Bu sınıf yönteminde sınıf örneği nasıl oluşturulur?
- 18. Visual Studio'da örnekleme örnek değişkenleri
- 19. Örnek değişkenleri Mixins içinde başlatılıyor
- 20. Etkinliğin örnek değişkenleri ne zaman başlatılıyor?
- 21. Bir ruby nesnesinin örnek değişkenleri nasıl yazdırılır
- 22. Java Kalıtım - örnek değişkenler
- 23. Ruby: Minitest, test birimi ve örnek değişkenleri
- 24. XAML'de sınıf örneği nasıl oluşturulur?
- 25. sınıfı Sınıf - örnek ile sınıf yöntemleri
- 26. piton sınıf nesnesi ve değişkenleri linked_list sınıfının nesne oluşturma
- 27. Örnek sınıf kurucu
- 28. Örnek değişkenleri atamak için yöntem yolu
- 29. Korumalı statik üye değişkenleri
- 30. statik değişken üye değişkenleri?
"Açıkça Metaclasses Görmek" (http://viewsourcecode.org/why/hacking/seeingMetaclassesClearly.html) "; Ruby'nin sınıf ve nesnelerinin çalışma şeklini anlamaya çalışırken çok yardımcı oluyor. –