2012-02-09 22 views
6

Bazı blog ve makaleleri arayarak, Ruby'deki her bir sınıfın kendi başına bir örneğinin bulunduğunu buldum. Sınıf metotları ile örnek metotları arasındaki fark nedir ve ruby, nesnenin nesnesi yaratılmasına izin verdi mi?Ruby'de sınıf yöntemine ve örnek yöntemine nasıl erişebilirim?

Ben YAPIN

str = Class.new(String) 
=> #<Class:0xb5be1418> 

my_str = str.new() 
=> "" 

my_str = str.new("hello") 
=> "hello" 

my_str.class 
=> #<Class:0xb5be1418> 

str.class 
=> Class 

anlamak mümkün değil hala böyle bir şey ama yapmaya çalışacağım TAMAMEN CONFUSED böylece String ait üst sınıf ile anonim sınıf oluşturmak ilk cümlede bu

cevap

0
class Dog 
# Returns the number of dog objects created using this class 
def self.count 
end 

# Returns name of the dog object 
def name 
end 
end 

, (tüm köpek nesneler ile ilgilidir) genel yöntem class method olarak adlandırılır.

Belirli bir köpekle ilgili yöntem (köpek nesnesi) instance method olarak adlandırılır.

Ruby model nesnelerine göre, Dog, Class sınıfının bir örneğini işaret eden bir constant'dur. Köpek'e bir sınıf yöntemi eklendiğinde, sınıf yöntemlerini korumak için sınıf hiyerarşisinde Metaclass adı verilen yeni bir sınıf eklenir.

4

anlat:

my_str.class.superclass # => String 

Ama bu gerçek soru :)

özü değil

Örnek, sınıfın bir nesnesidir: String.new() # creates instance of class String. Örnekler (String.new()).class #=> String sınıflarına sahiptir. Tüm sınıflar aslında bir Class: String.class # => Class sınıfının örnekleridir. Class sınıfının örnekleri de, bunlardan miras aldığı superclass sınıfına sahiptir.

Örnekleme yöntemi, bir nesnenin örneğinde arayabileceğiniz bir yöntemdir. Ruby

"st ri ng".split # split is an instance method of String class 

sınıf yöntemiörnek yöntemleri Class sınıfı (herhangi bir sınıf) bir nesne için ortak bir terimdir.

String.try_convert("abc") # try_convert is a class method of String class. 

Sen this article örneğin ve sınıf yöntemleri hakkında daha fazla bilgi bulabilirsiniz.

Yukarıdaki örnekte
+2

Tamamen nitroesitif olmak için, sınıf yöntemleri, Sınıf –

+0

@ FrederickCheung, +1'in örneklerinin tekil yöntemleridir, ancak Ruby'nin yeni başlayanlara, Sınıf ve Örnek yöntemleri arasındaki farkı anlaması için bu bilginin yeniden oluşturulmadığına inanıyorum;) –

İlgili konular