¿Creando objetos a partir de objetos? O estoy engañado

¿Qué está sucediendo en el siguiente código?

A = Class.new

class << A
  def speak
    puts "Dave"
  end
end

A.speak
B = A.new 

¿Cómo es esto posible lo que realmente está sucediendo? y qué es la clase 'Clase'.

preguntado el 30 de agosto de 11 a las 22:08

1 Respuestas

A = Class.new

Esto es similar a:

class A
end

Mientras define una clase vacía y le da el nombre A. (NB: en Ruby, la convención es que los identificadores que comienzan con una letra mayúscula son constantes).

class << A
  def speak
    puts "Dave"
  end
end

es parecido a:

class A
  def A.speak
    puts "Dave"
  end
end

Aquí está definiendo un método de clase en A (a diferencia de un método de instancia).

La línea:

A.speak

es simplemente llamar al método de clase.

Por último:

B = A.new

está creando una instancia de clase A y asignándolo a la constante B.


Para responder a su otra pregunta. La clase de Class es ... Class! Puedes ver esto en irb:

irb(main):022:0> Class.class
=> Class

Respondido 31 ago 11, 03:08

Entonces, ¿qué es A? un objeto o una clase? - pankajdoharey

En Ruby las clases también son objetos. Entonces son ambos. - jergason

Jergason tiene razón. A es una clase, también puede decir que es un objeto cuya clase es Class, o que es una instancia de clase Class. No es una instancia de la clase. A, pero B es una instancia de clase A. Además, B en sí mismo no es una clase, pero es un objeto. - Mike Tunnicliffe

Increíble gracias ... Tantas dudas despejadas hoy. Ruby está verdaderamente orientado a objetos. - pankajdoharey

@fd Pero la clase 'Clase' es una instancia de la clase 'Clase' - pankajdoharey

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.