Hier Ruby-Klassenvariablen, Instanzvariablen, Accessoren usw. Ich werde den grundlegenden Teil schreiben.
Die Klasse selbst, die Unterklasse Variablen, auf die über Klassenmethoden und Instanzmethoden verwiesen werden kann.
Um es zu definieren, fügen Sie am Anfang "@@" hinzu.
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
Durch Halten eines Werts in einer Instanzvariablen ist es möglich, einen objektspezifischen Status zu halten. Beachten Sie, dass auf Instanzvariablen nicht direkt von außerhalb des Objekts zugegriffen werden kann. Sie müssen die Methode "attr_accessor" verwenden, um darauf zuzugreifen.
class Famiry
attr_accessor :name
end
father = Famiry.new
father.name
# => nil
father.name = "Namihey"
father.name
# => Namihey
Wenn attr_accessor nicht verwendet wird, tritt ein NoMethodError auf.
class Famiry
end
father = Famiry.new
father.name = "Namihey"
# => undefined method `name=' for #<Famiry:0x00007f8a97908bd8> (NoMethodError)
Wenn Sie es definieren, indem Sie in der Instanzmethode "@" voranstellen, wird es zu einer Instanzvariablen.
class Geinin
def initialize(val)
@val = val
end
def tukkomi
puts @val
end
end
east = Geinin.new("Warum")
east.tukkomi
north = Geinin.new("Warum")
north.tukkomi
attr_accessor
Diese Methode erlaubt "Referenz" und "Zuweisung" für Instanzvariablen.
attr_reader
, um die Zuweisung zu verweigern und nur Referenzen zuzulassen
attr_writer
, um Referenzen zu verweigern und nur Zuweisungen zuzulassen
Usw. werden ordnungsgemäß verwendet.
Eine solche Methode wird als "Accessor" bezeichnet.
Die folgenden Methoden werden unter Verwendung der obigen Methode definiert.
#Referenzmethode
def name
@name
end
#Zuweisungsmethode
def name=(val)
@name = val
end
Da die Klasse ein Objekt der Class-Klasse ist, das Klassenobjekt selbst Es kann Instanzvariablen haben.
In dem Kontext, in dem self auf eine Klasse verweist, genau wie die obigen Instanzvariablen Wenn Sie es am Anfang mit "@" definieren, wird es zu einer Klasseninstanzvariablen.
Sie können auch in dem Kontext darauf verweisen, in dem self
auf die Klasse verweist.
class klass
#Definition
@class_instance_val = :class_instance_val
def self.class_method
#Referenz
@class_instance_val
end
end
Klassenvariablen und Klasseninstanzvariablen fühlen sich möglicherweise gleich an. Weil Klasseninstanzvariablen Instanzvariablen von Klassenobjekten sind Innerhalb der in dieser Klasse definierten Instanzmethode kann nicht darauf verwiesen werden.
Außerdem können Klassenvariablen von Klassen, die diese Klasse erben, referenziert und geändert werden. Klasseninstanzvariablen sind nicht zulässig. Zusammenfassend unterscheiden sich die folgenden zwei Punkte.
Recommended Posts