2012-02-09 16 views
6

Al buscar algún blog y artículo encontré que cada clase en Ruby es en sí misma una instancia de Class. ¿Cuál es la deferencia entre los métodos de clase y los métodos de instancia y permitió ruby ​​crear un objeto de objeto?¿Cómo puedo acceder al método de clase y al método de instancia en ruby?

trato de hacer algo como esto, pero todavía no es capaz de entender

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

my_str = str.new() 
=> "" 

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

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

str.class 
=> Class 

ahora plenamente CONFUNDIDOS así que dime sobre este

Respuesta

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 

En el ejemplo anterior, el método genérico (que está relacionada con todos los objetos de perro) se llama la class method.

El método que está relacionado con un perro en particular (objeto de perro) se llama instance method.

Según los modelos de objetos ruby, Dog es un constant que apunta a una instancia de la clase Class. Cada vez que se agrega un método de clase a Dog, se agregará una nueva clase llamada Metaclass en la jerarquía de clases para mantener los métodos de clase.

4

En la primera frase se crea clase anónima con superclase de String:

my_str.class.superclass # => String 

Pero esta no es la esencia de su pregunta real :)

La instancia es un objeto de alguna clase: String.new() # creates instance of class String. Las instancias tienen clases (String.new()).class #=> String. Todas las clases son en realidad instancias de una clase Class: String.class # => Class. Las instancias de la clase Class también tienen superclass - clase de la que heredan.

El método de instancia es un método que puede invocar en la instancia de un objeto.

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

método de clase en Ruby es un término común para métodos de instancia de un objeto de Class clase (cualquier clase).

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

Puede leer más sobre los métodos de instancia y clase en this article.

+2

Para ser completamente quisquilloso, los métodos de clase son métodos únicos de instancias de la clase –

+0

@FrederickCheung, +1, pero creo que este conocimiento no es necesario para que el principiante de Ruby entienda la diferencia entre los métodos de clase e instancia; –

Cuestiones relacionadas