Ici, les variables de classe ruby, les variables d'instance, les accesseurs, etc. J'écrirai la partie de base.
La classe elle-même, la sous-classe Variables pouvant être référencées à partir des méthodes de classe et des méthodes d'instance.
Pour le définir, ajoutez «@@» au début.
class SuperKlass
@@super_klass_var = :super_klass_val
end
class Klass < SuperKlass
@@class_var = :class_val
def self.class_method
puts "class_method called"
puts @@super_klass_var
puts @@class_var
end
def instance_method
puts "instance_method called"
puts @@super_klass_var
puts @@class_var
end
end
klass_instance = Klass.new
Klass.class_method
# => class_method called
# => super_klass_val
# => class_val
klass_instance.instance_method
# => instance_method called
# => super_klass_val
# => class_val
En conservant une valeur dans une variable d'instance, il est possible de conserver un état spécifique à un objet. Notez que les variables d'instance ne sont pas accessibles directement depuis l'extérieur de l'objet. Vous devez utiliser la méthode ʻattr_accessor` pour y accéder.
class Famiry
attr_accessor :name
end
father = Famiry.new
father.name
# => nil
father.name = "Namihey"
father.name
# => Namihey
Si attr_accessor n'est pas utilisé, une erreur NoMethodError se produira.
class Famiry
end
father = Famiry.new
father.name = "Namihey"
# => undefined method `name=' for #<Famiry:0x00007f8a97908bd8> (NoMethodError)
Si vous le définissez en le préfixant avec «@» dans la méthode d'instance, il devient une variable d'instance.
class Geinin
def initialize(val)
@val = val
end
def tukkomi
puts @val
end
end
east = Geinin.new("Pourquoi")
east.tukkomi
north = Geinin.new("Pourquoi")
north.tukkomi
attr_accessor
Cette méthode autorise la «référence» et «l'assignation» pour les variables d'instance.
ʻAttr_reader pour refuser l'attribution et n'autoriser que les références ʻAttr_writer
pour refuser les références et autoriser uniquement les affectations
Etc. sont utilisés correctement.
Une telle méthode est appelée un «accesseur».
Les méthodes suivantes sont définies à l'aide de la méthode ci-dessus.
#Méthode de référence
def name
@name
end
#Méthode d'attribution
def name=(val)
@name = val
end
Puisque la classe est un objet de la classe Class, l'objet de classe lui-même Il peut avoir des variables d'instance.
Dans le contexte où self pointe vers une classe, tout comme les variables d'instance ci-dessus Si vous le définissez avec «@» au début, il devient une variable d'instance de classe.
Vous pouvez également vous y référer dans le contexte où self
pointe vers la classe.
class klass
#Définition
@class_instance_val = :class_instance_val
def self.class_method
#référence
@class_instance_val
end
end
Les variables de classe et les variables d'instance de classe peuvent ressentir la même chose, Parce que les variables d'instance de classe sont des variables d'instance d'objets de classe Il ne peut pas être référencé dans la méthode d'instance définie dans cette classe.
En outre, les variables de classe peuvent être référencées et modifiées à partir des classes qui héritent de cette classe. Les variables d'instance de classe ne sont pas autorisées. En résumé, les deux points suivants sont différents.
--Référence de la méthode d'instance
Recommended Posts