Werfen wir einen normalen Rubin Klasse nehmen:Ruby-Klasse-Instanzmethode def initialize: Instanz oder Klassenmethode?
class Person
attr_accessor :name
def initialize name
@name = name
end
end
bob = Person.new("bob")
Meine Frage ist die Natur der initialize. Hier ist die Sache, new
ist eindeutig eine Klassenmethode, aber mir scheint, dass initialize
ist eine Instanz-Methode (nicht Klasse), die für die Instanz aufgerufen wird, wenn die Klassenmethode new
aufgerufen wird.
Habe ich das richtig? Oder kann jemand neues Licht schütten? Ich habe einige Google-Suchen durchgeführt und konnte keine Klarheit finden.
ist es irgendwie einzigartig - Sie können auf den Bereich der Instanzmethode zugreifen, aber wie Sie sagen, ist es wie eine Klassenmethode aufrufbar. Beachten Sie, dass initialize nicht aufgerufen wird, wenn Sie 'def self.new' definieren. –
bedeutet das, dass es aufgerufen wird, weil die 'neue' Methode aufgerufen wird? oder ist es in der Tat die 'neue' Methode? –
Ja. Beachten Sie auch, dass [Modul # attr_accessor] (http://ruby-doc.org/core-2.0.0/Module.html#method-i-attr_accessor) ebenfalls eine Klassenmethode ist, die zwei Instanzmethoden (hier 'name') erzeugt und 'name ='). –