Creo que Object es el ancestro de todos, incluida la Clase. Entonces, creo que debería ser Class.class == Object. Me siento un poco confundido y retorcido¿Por qué Object.class == Class en Ruby?
Respuesta
clase devuelve la clase (# tipo) no el antepasado. La clase de Objects es Class. La clase de la clase es Clase. La clase es un objeto. Verdad en publicidad: nunca aprendí Ruby, pero la relación Object-Class tiene que es la que Smalltalk estableció hace 30 años.
Esta es la forma en que funciona en Ruby 1.9:
Class.class = Class
Class.superclass = Module
Module.class = class
Module.superclass = Object
Object.class = Class
Object.superclass = BasicObject
BasicObject.class = Class
BasicObject.superclass = nil
Object
's clase es Class
(ya Object
sí es una clase), y Object
es un antepasado de Class
.
Hay una referencia circular, es bastante compleja. Mi recomendación personal, si realmente no necesitas jugar con ella, no vayas allí.
clase, objeto, módulo y todas las demás clases son casos de un clase Clase :)
CLASS.CLASS == módulo.clase == Object.class == Hash.class == Clase
clase es también un objeto (como cualquier otro objeto en el sistema), pero no es instancia directa de objetos, que es una instancia de una derivados clase (clase en este caso)
Class.superclass.superclass == Objeto (con el Módulo en el medio)
El objeto en sí también es una clase. tan Object.class == Clase
Clase, Módulo y Objeto tienen una dependencia circular ya que están en el núcleo del modelo OO.
Object.class.superclass.superclass == Objeto
=> parent (.superclass)
-> instance-of (.class)
alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct
La dependencia circular funciona porque todas estas son clases integradas. Son parte del tiempo de ejecución Ruby básico y están configurados de esta manera en la puesta en marcha y no se agregan en la forma en que normalmente se agregaría una clase. El tiempo de ejecución tiene el poder de configurar los punteros como lo desee, y el diseñador eligió hacerlo de esta manera. –
- 1. ¿Por qué "[self class] == [super class]"?
- 2. Ruby class set/get
- 3. Ruby: initialize() vs class body?
- 4. Ruby Class objeto recolección de basura
- 5. ¿Por qué Java genera varios archivos .class en la compilación?
- 6. por qué los métodos de extensión en C# Class Libraries
- 7. Ruby Exceptions - ¿Por qué "else"?
- 8. ¿Por qué Ruby expone símbolos?
- 9. ¿Por qué Ruby tiene Numeric.new?
- 10. ¿Por qué `a = a`` nil` en Ruby?
- 11. ¿Por qué debería evitar @@ class_variables en Ruby?
- 12. En Ruby, ¿por qué nil.id devuelve 4?
- 13. Ruby Object Model/Class/Modules .... diagrama en cualquier lugar?
- 14. ¿Por qué .class maravilloso devolver un valor diferente que .getClass()
- 15. ¿Qué es Proxy Class en C++
- 16. ¿por qué would .is_a? y .class dan resultados contradictorios?
- 17. Perl Class :: Falla del accesorio, ejemplo trivial: ¿por qué?
- 18. Ruby Regexp Interpolation/Character Class/Global Variable Syntax Clash?
- 19. ¿Qué significa "class << self" en Rails?
- 20. ¿Cuál es la diferencia entre Class y Klass en ruby?
- 21. Ruby Class Métodos vs. Métodos en clases propias
- 22. Ruby: ¿por qué puts llama a_ary?
- 23. .NET Class Loader - ¿Qué es?
- 24. ¿Qué hace @class en Objective-C?
- 25. ¿Por qué relative_require no funciona en Ruby 1.8.6?
- 26. respon_with no funciona en ruby on rails. ¿Por qué?
- 27. ¿Qué significa @@ variable en Ruby?
- 28. Ruby Enumerator - ¿Por qué terminar con excepción?
- 29. ¿por qué ruby scanf es tan lento?
- 30. class << self vs self.method with Ruby: qué hay mejor?
metaclases funcionan de manera diferente en Ruby: consiguen inyectan en la cadena de búsqueda de métodos, por tanto, Ruby no tiene las dos jerarquías paralelas de clases y metaclases, pero, como dices, los conceptos básicos son idénticos. –
@Jorg: gracias. Tan pronto como termine mi proyecto actual, retomaré los rieles y el rubí, he escuchado tantas alabanzas que estoy intrigado :) –
Gracias. Creo que ahora tengo claras las relaciones. La información de @Jörg_W_Mittag también ayuda. Es decir, las clases y las Metaclases son dos conceptos diferentes pero relacionados. – fwoncn