Ich denke, Objekt ist jedermanns Vorfahr, einschließlich Klasse. Also ich denke, es sollte Class.class == Objekt sein. Ich fühle mich ein wenig verwirrt und verdrehtWarum Object.class == Klasse in Ruby?
Antwort
Klasse gibt die Klasse (#Typ) nicht der Vorgänger. Die Klasse von Objekten ist Klasse. Klasse ist Klasse. Klasse ist ein Objekt. Wahrheit in der Werbung: Ich habe Ruby nie gelernt, aber die Object-Class-Relation hat, um der eine Smalltalk vor 30 Jahren zu sein.
Dies ist so, wie es in Ruby 1.9 funktioniert:
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-Klasse ist Class
(seit Object
selbst eine Klasse) und Object
ist ein Vorfahre von Class
.
Es gibt eine zirkuläre Referenz, es ist ziemlich komplex. Meine persönliche Empfehlung, wenn Sie nicht wirklich damit spielen müssen, gehen Sie nicht dorthin.
Klasse, Objekt, Modul und alle anderen Klassen sind Instanzen einer Klasse Klasse :)
Class.class == == Module.class Object.class == == Hash.class Klasse
Klasse ist auch ein Gegenstand (wie jedes andere Objekt in dem System), aber es ist nicht direkte Instanz-Objekt, ist es eine Instanz einer Klasse abgeleitet (Klasse in diesem Fall)
Class.superclass.superclass == Objekt (mit Modul in der Mitte)
Objekt selbst ist auch eine Klasse. also Object.class == Klasse
Klasse, Modul und Objekt haben eine kreisförmige Abhängigkeit, da sie im Kern des OO-Modells sind.
Object.class.superclass.superclass == Objekt
=> parent (.superclass)
-> instance-of (.class)
alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct
Die zirkuläre Abhängigkeit funktioniert, weil alle eingebauten Klassen sind. Sie sind Teil der Kern-Laufzeit von Ruby und sind beim Start so eingerichtet und werden nicht so hinzugefügt, wie Sie normalerweise eine Klasse hinzufügen würden. Die Laufzeit hat die Macht, die Zeiger so einzurichten, wie sie wollen, und der Designer hat es so gewählt. –
- 1. Warum gibt Class.getSuperclass() manchmal Object.class zurück?
- 2. Warum findet reflections.getSubTypesOf (Object.class) keine Enums?
- 3. In Java, was macht object.class?
- 4. Warum funktioniert ArrayList.contains (Object.class) nicht zum Suchen von Instanztypen?
- 5. Dynamische Klasse in Ruby
- 6. Warum ist ALLES eine Instanz von Klasse in Ruby?
- 7. Ruby: 'neu' ohne Klasse
- 8. 'Object' benannte Klasse in Ruby
- 9. Ruby: NoMethodError, aber warum?
- 10. Wann ist eine Ruby-Klasse nicht diese Ruby-Klasse?
- 11. Warum kann Ruby on Rails diese Klasse nicht finden?
- 12. Ruby aktuelle Klasse
- 13. Ruby-Klasse gesetzt/erhalten
- 14. Ruby-Klasse und Funktion
- 15. ruby: Anrufer Klasse
- 16. Ruby-Klasse Initialisierung
- 17. Ruby-Klasse vs Struct
- 18. Warum Selbst-Klasse Klasse
- 19. Pass in Ruby Variable zu einer Klasse Factory Ruby-Skript
- 20. Wie [] auf einer Klasse arbeitet in Ruby
- 21. Garbage Collection der Klasse Instanzvariablen in Ruby
- 22. Ruby-Methodenaufrufe in der Klasse Körper erklärten
- 23. Aufrufmethode für eingeschlossene Klasse in Ruby
- 24. Lokale Variablen für eine Klasse in Ruby
- 25. Warum sagt mir Ruby das: Klasse ist auf Klasse (Kernel) definiert und nicht Objekt? Nehmen Sie
- 26. Ruby: Klasse akzeptiert einen Block?
- 27. application.rb Überschreibung Basis Ruby-Klasse
- 28. über Ruby-Klasse Methode aufrufen
- 29. Warum hat Ruby Numeric.new?
- 30. Verständnis Ruby-Match-Methode von Regexp Klasse
Metaklassen funktionieren anders in Ruby: Sie bekommen in die Methode Lookup-Kette injiziert, so hat Rubin nicht über die zwei parallele Hierarchien von Klassen und Metaklassen, aber, wie Sie sagen, die Grundlagen sind identisch. –
@Jorg: Danke. Sobald ich mein aktuelles Projekt beendet habe, werde ich auf Rails und Ruby aufheben, ich habe so viel Lob gehört, dass ich fasziniert bin :) –
Danke. Ich denke, ich bin mir jetzt über die Beziehungen klar. @ Jörg_W_Mittags Informationen helfen auch. Das heißt, Klassen und Metaklassen sind zwei verschiedene, aber verwandte Konzepte. – fwoncn