Ruby delilik: Sınıf Nesnesi vs?
Ben sadece JRuby ile oynamaya başladı. Bu ilk ruby yazıma. Ruby zor bir zaman sınıflar vs nesneleri anlayış vardı. Değil başka bir Nesne yönelimli dil ne sınıflar ve nesneler gibi yani. bir örnek için
Class.is_a? Object
verirdoÄŸru ve
Object.is_a? Object
çok.
sınıf & Nesneyi iki nesne
iÅŸte bir tane daha geliyor
Class.is_a? Class
verirdoÄŸru ve
Object.is_a? Class
çok.
dur, daha bitmedi
Object.instance_of? Class
Class.instance_of? Class
Her ikisi de doÄŸrudur
Object.instance_of? Object
Class.instance_of? Object
Her ikisi de yanlış. doğru, hiçbir nesne örneği olabilir.
Ve
Class.kind_of? Class
Object.kind_of? Class
her ikisi de doÄŸrudur
Class.kind_of? Object
Object.kind_of? Object
her ikisi de doÄŸrudur
Her ikisi de tam olarak aynı, neden bu iki var mı.?
Biraz daha kazma sonra, geri dönüş yöntemi için bu basit yöntem, her iki tarafından desteklenen bir liste hazırladım
irb(main):054:0> def print_methods(obj)
irb(main):055:1> obj.methods.each do |mm|
irb(main):056:2* puts mm
irb(main):057:2> end
irb(main):058:1> end
Print_methods(Nesne) ve print_methods(Sınıf) arasında sadece yöntem farkı vardır
Nesting
eğer Yuvalama miras anlamına geliyorsa, Nesne mühürlü sınıfına benzer??
Birisi bunun ne olduğunu bana açıklayacak?
Güncelleme:Yorum Evds
İlginç bir şekilde bu yöntem farklılıkları listesi görüyorum
c=Class.new
print_methods(c)
&
o=Object.new
print_methods(o)
Şimdi Örnek gerçekten sınıfın bir örneğini (bu sınıf örneği aslında bir Nesne) nesne örneği değil anladığım kadarıyla. Ve hatta bu başka bir örneği örnekleri span için bana izin ver
xx = c.new //works - c is an Object / and xx is a instance of an Object c
yy = o.new //nope - o is already a instance of an Object, so it cannot be instantiated again
Sonunda, gerçekten bir Nesne Sınıfının bir örneğidir. Çünkü
xx.is_a? Class
yanlış ama
xx.is_a? Object
true değerini döndürür
Ben? ben?
CEVAP
Temelde önemli olan şey anlamak her sınıfın bir örneği Class sınıf ve her sınıfın bir alt sınıfı Object (1.8 - 1.9 her sınıfın bir alt sınıfı BasicObject). Her sınıf Object, yani Class bir sınıfın bir örneği olması anlamında bir nesnedir.
Tabii ki bu Class kendisi bir örnek olduğu anlamına gelir. Eğer beyninize zarar verirse, bu konuda çok derin düşünme.
Object Class is_a? Object
x.is_a? y x'y s class veya x's sınıfı y devralır. x.class == y or x.class < y, yani true döndürür Her sınıf nesneden devralır beri x.is_a? Object gerçek x ne olursa olsun verir. (1.9 1,8 neyse, şimdi devralma hiyerarşisinde en temel sınıf olan da BasicObject var).
Ayrıca is_a? Class
Object Class hem o kadar da şaşırtıcı olmamalı yani gerçekten dersleri alıyor.
Ayrıca instance_of? Class ama instance_of? Object.
Eğer x.class y bir alt sınıfı ise x.class == y değil is_a?, x.instance_of? y aksine sadece true değerini döndürür. x y her iki yana instance_of? Class, instance_of? Object değiller.
doğru, hiçbir nesne örneği olabilir.
Bu doÄŸru deÄŸil. Object.new.instance_of? Object doÄŸrudur.
kind_of?
kind_of? yukarıda is_a?, bir diğer adıdır.
Her ikisi de tam olarak aynı, neden bu iki var mı.?
Şu ana kadar her şey tüm sınıflar için geçerli olduğunu işaret edilmelidir. E. g. String.is_a? Object, String.is_a? Class String.instance_of? Class doğru ve String.instance_of? Object yukarıdaki gibi aynı nedenlerle yanlıştır. (String.is_a? String 71* aynı nedenlerle hem de yanlış bir Dize sınıfı, bir dize değil).
Tüm sınıfları aynı olan bu sonuç değil. Sadece aynı sınıfın tüm örnekleri onlar.
Yöntemleri karşılaştırmak
Object Class her iki sınıf olduğundan, her ikisi de tüm örnek yöntemleri Class tarafından tanımlanmış. Class ayrıca nesting tek yöntemi vardır. nesting miras ile ilgisi yok şu anda iç içe olduğunuzu size söyler.
İçin herhangi bir sınıf TheClass.methods döndürecektir örnek yöntemleri tanımlanmış Class (örneğin superclass döndüren, sınıf TheClass devralır, ve new yeni bir örneğini oluşturur TheClass) artı tek yöntem tarafından tanımlanan sınıf.
Neyse methods doğrudan yöntemler olarak adlandırabileceğimiz belirli bir nesne söyler. Yöntemler bir sınıfın bir örneği olarak adlandırabileceğimiz söylemez. Bunun için Object ve Class önemli ölçüde farklı sonuçlar verir instance_methods kullanabilirsiniz.

Ruby bir sınıf olup olmadığını Test ba...
Nasıl bir sınıf nesnesi için özel bir ...
Ruby: örneği Arama sınıf yöntemi...
Sınıf ruby ve Klass arasındaki fark ne...
Ruby sınıf türleri ve case ifadeleri...