[Ruby] Grundkenntnisse über Klasseninstanzvariablen usw.

Einführung

Hier Ruby-Klassenvariablen, Instanzvariablen, Accessoren usw. Ich werde den grundlegenden Teil schreiben.

Klassenvariable

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

Instanzvariable

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

Klasseninstanzvariable

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

Unterschied zwischen Klassenvariable und Klasseninstanzvariable

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.

Ende

Recommended Posts

[Ruby] Grundkenntnisse über Klasseninstanzvariablen usw.
[Ruby] Klassenmethoden, Instanzmethoden usw.
Grundkenntnisse in Ruby on Rails
[Ruby] Klassen, Instanzvariablen, Instanzen usw.
[Grundkenntnisse in Java] Umfang der Variablen
[Ruby] -Methode, Instanzmethode ...
[Ruby] Grundlegende Befehlsliste
[Ruby] Behandeln Sie Instanzvariablen mit Instanzmethoden
[Ruby] Zeigt den Inhalt von Variablen an
Grundwissen
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
Grundkenntnisse in der Java-Entwicklung Schreiben von Notizen
[Grundkenntnisse in Java] Informationen zur Typkonvertierung
Java-Ingenieure im Vergleich zum Erlernen der grundlegenden Grammatik von Ruby jetzt Teil 1 (Basic, Variablen)
Konzept der Instanz ・ Klassentypvariable ・ Konstruktor ・ Statisches Element
Zusammenfassung der Grundkenntnisse von Rails, die von progate erworben wurden
Empfehlung der Serviceklasse in Ruby on Rails
Ruby Grundbegriffe
Grundlagen von Ruby
Java Grundkenntnisse 1
Über Variablen und Umfang (Ruby)
Einführung in Java für Anfänger Grundkenntnisse der Java-Sprache ①
[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst
[Java Silver] Was sind Klassenvariablen, Instanzvariablen und lokale Variablen?