Rubys detaillierte Syntax: Wenn es Variablen und Methoden mit demselben Namen gibt

In Ruby können Variablen und Methoden denselben Namen haben. Wenn es Variablen und Methoden mit demselben Namen gibt, hat die Variable Vorrang. Es hat nichts mit der Reihenfolge der Definition zu tun.

Wenn Sie () hinzufügen, wird dies als Methode betrachtet. Selbst wenn Sie ein Argument angeben, handelt es sich um einen Methodenaufruf.

def foo(n = 1)
  "method" * n
end

foo = "variable"

#Dies ist eine Variable
foo #=> "variable"
#Dies ist ein Methodenaufruf
foo() #=> "method"
#Dies ist auch ein Methodenaufruf
foo 2 #=> "methodmethod"

Wenn Sie einen Empfänger mit . angeben, wird dies auch als Methode betrachtet.

public  # Ruby 2.Bis zu 6:Wenn es privat ist.Kann nicht mit angerufen werden/ 2.7 oder später:OK ohne Öffentlichkeit
def foo(n = 1)
  "method" * n
end

foo = "variable"

#Dies ist eine Variable
foo #=> "variable"
#Dies ist ein Methodenaufruf
self.foo #=> "method"

Ruby-Klassennamen sind Konstantennamen, dh ein Variablentyp. Wenn also Klassen und Methoden mit demselben Namen vorhanden sind, ist das Verhalten das gleiche wie oben.

public
def Foo(n = 1)
  "method" * n
end

class Foo
end

#Dies ist eine Klasse
Foo #=> Foo
#Dies ist ein Methodenaufruf
Foo() #=> "method"
#Dies ist auch ein Methodenaufruf
Foo 2 #=> "methodmethod"
#Dies ist auch ein Methodenaufruf
self.Foo #=> "method"

Das Kernelmodul (https://ruby-doc.org/core-2.7.1/Kernel.html) verfügt über Methoden mit dem Namen Array und String.

#Rufen Sie die String-Methode des Kernel-Moduls auf, nicht die String-Klasse.
String(1) #=> "1"

Recommended Posts

Rubys detaillierte Syntax: Wenn es Variablen und Methoden mit demselben Namen gibt
[Kopfpanik] Priorität, wenn Variablen / Methoden mit demselben Namen in geerbten Klassen verwendet werden
Rails Private Methoden tun weh, wenn Sie sich genauso fühlen wie Java!
Wenn Sie Probleme mit dem Zeichencode-Problem in Myanmar (Burmesisch) haben
Wenn Sie Probleme mit JPA oder Hibernate haben, googeln Sie nicht und schauen Sie zuerst hier
Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?
Ruby / rexml: Drehen Sie jedes mit einem Element mit dem gleichen Namen