Ich habe im Metapro-Buch noch einmal etwas über Rubys grundlegende Sprachspezifikationen wie Objekte, Klassen und Methoden gelernt. Machen Sie sich also eine Notiz als Memorandum.
Rubys MetaPro scheint Sprachelemente wie Klassen, Module und Instanzvariablen zu bedienen ...
Was ist ein Objektmodell? Die Idee, ein Objekt zu erfassen, das programmbezogene Daten als ein Modell zusammenfasst. Führen Sie den folgenden Code aus
book.rb
class Book
def name
@name = 'metapro-ruby'
end
end
book = Book.new
book.class # => Book
Instanzvariablen sind im Objekt enthalten Es besteht keine Verbindung zwischen Ruby-Objektklassen und Instanzvariablen Instanzvariablen werden nur angezeigt, wenn ein Wert zugewiesen wurde Wenn Sie die Namensmethode nicht aufrufen, ist die Buchinstanzvariable nicht vorhanden.
book.rb
book.name
book.instance_variables # => [:@name]
Objekte verfügen neben Instanzvariablen über Methoden
book.rb
book.name
book.methods.grep(/name/) # => [:name]
Zu diesem Zeitpunkt ist zu beachten, dass die Namensmethode im Buch nicht vorhanden ist. Objekte haben nur Instanzvariablen und Verweise auf Klassen
Die name-Methode ist eine Instanzmethode der Book-Klasse, und ein Objekt (eine Instanz) der Book-Klasse ist erforderlich, um sie aufzurufen. Selbst wenn dieselbe Methode auf eine Klasse fokussiert ist, wird sie als Instanzmethode bezeichnet, und wenn sie sich auf ein Objekt konzentriert, wird sie als Methode bezeichnet.
Zusammenfassung
--Objektinstanzvariablen sind im Objekt vorhanden
Klassen sind Objekte, und was für Objekte gilt, gilt auch für Klassen Klassen haben wie Objekte Klassen, die Klassenklassen sind.
book.rb
'metapro-ruby'.class # => String
String.class # => Class
Ruby-Klasse Die Klasseninstanz ist die Klasse selbst Die Klasse verfügt auch über Methoden, und die Methoden der Klasse sind Instanzmethoden der Class-Klasse.
Class.instance_methods(false) # => [:allocate, :new, :superclass]
Array.superclass # => Object
Object.superclass # => BasicObject
BasicObject.superclass # => nil
Die Object-Klasse verfügt auch über Methoden, die mit jedem Objekt verwendet werden können Die BasicObject-Klasse ist die Wurzel der Ruby-Klassenhierarchie und verfügt über einige grundlegende Methoden.
Die Oberklasse der Klasse ist Modul Um genau zu sein, ist eine Klasse ein Modul, das drei Instanzmethoden (new, allocate, superclass) zum Erstellen von Objekten und zum Erben von Klassen hinzufügt.
Class.superclass # => Module
Alle Referenzen, die mit Großbuchstaben beginnen, sind Konstanten, einschließlich Klassennamen und Modulnamen. Der wichtige Unterschied zwischen Konstanten und Variablen ist der Umfang, und alle Konstanten im Programm sind wie ein Dateisystem in einem Baum angeordnet (Module und Klassen sind Verzeichnisse, Konstanten sind Dateien).
module MyModule
MyConstant = 'OUTER CONSTANT'
class MyClass
MyConstant = 'INNER CONSTANT'
end
end
MyModule::MyConstant # => "OUTER CONSTANT"
MyModule::MyClass::MyConstant # => "INNER CONSTANT"
~~ ・ Die Class-Klasse ist eine Unterklasse der Module-Klasse, und die Klasse ist auch ein Modul ~~
Ich habe einen Kommentar von @scivola erhalten und ihn korrigiert. Vielen Dank.
Recommended Posts