Letztes Mal schrieb ich Artikel über Klassenvererbung und Verschachtelung. Dieses Mal werde ich Grundkenntnisse wie Klassenmethoden schreiben.
Wie der Name schon sagt, handelt es sich um eine Methode, die von einem Klassenobjekt aufgerufen werden kann.
Es kann nicht mit einem Instanzobjekt aufgerufen werden. Ein häufiger Kontrast ist daher die "Instanzmethode". Dies wird später besprochen.
Es gibt die folgenden Methoden zur Definition.
Wenn Sie Ihre eigene Klasse als Empfänger in einer Methode verwenden, verwenden Sie "Klassenname" oder "Selbst". Es kann weggelassen werden, aber "self" in der Definition kann nicht weggelassen werden.
class Klass
def self.method_a
new
puts "created Klass instance"
end
end
Klass.method_a
# => created Klass instance
Alles, was in dieser Zeit definiert wird, ist eine Klassenmethode Dies ist praktisch, wenn Sie mehrere Elemente definieren.
class Klass
class << self
def method_a
new
puts "created Klass instance"
end
end
end
Klass.method_a
# => created Klass instance
Übrigens können Sie es auf ähnliche Weise so machen.
class Klass
end
class << Klass
def method_a
new
puts "created Klass instance"
end
end
Klass.method_a
# => created Klass instance
Eine Methode, die von einem Instanzobjekt aufgerufen werden kann. Dies steht im Gegensatz zur vorherigen Klassenmethode Es kann nicht von einem Klassenobjekt aufgerufen werden.
Die Definitionsmethode ist wie folgt.
class Klass
def method_a
puts "method_a called"
end
def method_b
method_a
puts "method_b called"
end
end
klass_instance = Klass.new
klass_instance.method_b
# => method_a called
# => method_b called
Eine objektspezifische Methode. Sie kann definiert werden, indem der Objektname vor den zu definierenden Methodennamen geschrieben wird. Beachten Sie, dass das Objekt bereits vorhanden sein muss, wenn Sie es definieren.
class Klass
end
apple = Klass.new
orenge = Klass.new
def apple.tokui_method
puts "I'm apple"
end
apple.tokui_method
# => I'm apple
orenge.tokui_method
# => undefined method `tokui_method'
Wenn das angegebene Objekt beim Definieren nicht vorhanden ist, tritt ein Fehler auf.
class Klass
end
def apple.tokui_method
puts "I'm apple"
end
apple = Klass.new
apple.tokui_method
# => undefined local variable or method `apple' for main:Object (NameError)
Wenn Sie innerhalb einer singulären Methode "super" aufrufen, wird die in der Klasse definierte Methode mit demselben Namen aufgerufen. Es besteht auch die Möglichkeit, diese Methode überschreiben zu können.
class Klass
def my_name
puts "I'm fruits"
end
end
apple = Klass.new
orenge = Klass.new
def apple.my_name
super
puts "I'm apple"
end
apple.my_name
# => I'm fruits
# => I'm apple
orenge.my_name
# => I'm fruits
Recommended Posts