J'ai appris à nouveau les spécifications de base du langage de Ruby telles que les objets, les classes et les méthodes dans le livre Metapro, alors prenez-en note en tant que mémorandum.
Ruby MetaPro semble utiliser des éléments de langage tels que des classes, des modules et des variables d'instance ...
Qu'est-ce qu'un modèle objet L'idée de saisir un objet qui résume les données liées à un programme en un seul modèle. Exécutez le code suivant
book.rb
class Book
def name
@name = 'metapro-ruby'
end
end
book = Book.new
book.class # => Book
Les variables d'instance sont contenues dans l'objet Il n'y a pas de connexion entre les classes d'objets Ruby et les variables d'instance Les variables d'instance n'apparaissent que lorsqu'une valeur est attribuée Si vous n'appelez pas la méthode name, la variable d'instance de livre n'existera pas.
book.rb
book.name
book.instance_variables # => [:@name]
En plus des variables d'instance, les objets ont des méthodes
book.rb
book.name
book.methods.grep(/name/) # => [:name]
A ce stade, il faut noter que la méthode name n'existe pas dans le livre. Les objets n'ont que des variables d'instance et des références à des classes
La méthode name est une méthode d'instance de la classe Book et un objet (instance) de la classe Book est nécessaire pour l'appeler. Même si la même méthode se concentre sur la classe, elle est appelée méthode d'instance, et lorsqu'elle se concentre sur l'objet, elle est appelée méthode.
Résumé
Les classes sont des objets et ce qui s'applique aux objets s'applique également aux classes Comme les objets, les classes ont des classes, qui sont des classes de classe.
book.rb
'metapro-ruby'.class # => String
String.class # => Class
L'instance de classe de classe Ruby est la classe elle-même La classe a également des méthodes et les méthodes de la classe sont des méthodes d'instance de la classe Class.
Class.instance_methods(false) # => [:allocate, :new, :superclass]
Array.superclass # => Object
Object.superclass # => BasicObject
BasicObject.superclass # => nil
La classe Object a également des méthodes qui peuvent être utilisées avec n'importe quel objet La classe BasicObject est la racine de la hiérarchie des classes Ruby et possède quelques méthodes de base.
La superclasse de la classe est Module Pour être précis, une classe est un module qui ajoute trois méthodes d'instance (new, allocate, superclass) pour créer des objets et hériter des classes.
Class.superclass # => Module
Toutes les références commençant par une majuscule sont des constantes, y compris les noms de classe et les noms de module. La différence importante entre les constantes et les variables est la portée, et toutes les constantes du programme sont organisées dans un arbre comme un système de fichiers (les modules et les classes sont des répertoires, les constantes sont des fichiers).
module MyModule
MyConstant = 'OUTER CONSTANT'
class MyClass
MyConstant = 'INNER CONSTANT'
end
end
MyModule::MyConstant # => "OUTER CONSTANT"
MyModule::MyClass::MyConstant # => "INNER CONSTANT"
~~ ・ La classe Class est une sous-classe de la classe Module, et la classe est également un module ~~
J'ai reçu un commentaire de @scivola et je l'ai corrigé. Merci beaucoup.
Recommended Posts