[RAILS] [Ruby / Namespace] Vertiefe ":: ← this", das du oft in Ruby siehst

Überblick

Ich lerne gerade die Programmiersprache Ruby und ihr Webframework Ruby on Rails. Es gibt einige Symbole, die Sie oft darin sehen.

:: ← Das ist es.

Aus Anfängersicht dachte ich bei diesem Symbol nur an "Schau nicht oft auf den Klassennamen". Natürlich macht es Sinn.

Dieser Artikel gibt Ihnen einen Überblick.


:: ← Was ist das?

Übrigens "::", das ich ohne besondere Aufmerksamkeit verwendet habe ← Das ist. Um es zu verstehen, müssen wir das Konzept des Namespace kennen.

Was ist ein Namespace?

Was ist ein Namespace? Einfach ausgedrückt ist dies der Bereich für die Verwaltung von Methoden und Variablen. Selbst mit dem gleichen "Sprechen" sind die Wörter in den Vereinigten Staaten und in Japan unterschiedlich, und selbst mit dem gleichen "Taro" sind ein Satz und zwei Sätze von Taro unterschiedliche Menschen.

Auf diese Weise ist der Namespace ein Mechanismus, der angibt, wo die Methoden und Variablen hingehören. Damit Konflikte aufgrund desselben Namens nicht auftreten.

Wie Sie verstanden haben, bedeutet ○○ :: △△ ○○, das zu △△ gehört.

Device :: ResistrationsController kann als ResistrationsController gelesen werden, das zu Devise gehört.

Außerdem werden Namespaces durch "Klasse" oder "Modul" unterteilt. Ich werde hier nicht ins Detail gehen, aber es gibt die folgenden Unterschiede zwischen Klassen und Modulen:

In Bezug auf die von @scivola hervorgehobenen Punkte Ich habe unten einige Korrekturen vorgenommen.


Bedeutung von :: / Spezifisches Beispiel

Bisher haben wir festgestellt, dass :: bedeutet, B zu aufzurufen, indem A :: B`` verwendet wird.

Bei näherer Betrachtung hat :: zwei Implikationen:

1.Aufrufen von Konstanten, die zu einem Klassenmodul gehören
2.Aufruf einer Methode, die zu einem Klassenmodul gehört

Schauen wir uns jedes Beispiel an.


1. Beziehen Sie sich auf den konstanten PI des Math-Moduls

Nennen wir die Konstante PI, die zum Math-Modul gehört, einer integrierten Ruby-Bibliothek, und geben Sie das Umfangsverhältnis aus. (Referenz: Ruby-Referenz | Modul Mathematik )

call_pi.rb


puts Math::PI

Führen Sie dieses Programm aus.

terminal


% ruby call_pi.rb
3.141592653589793

Ich konnte das Umfangsverhältnis π ausgeben.

Verwenden Sie diese Option, wenn Sie auf eine Konstante verweisen.

Nebenbei werde ich versuchen, später nach anderen Beispielen zu rufen. Versuchen Sie es mit ". (Dot)" aufzurufen, wie Sie eine Methode aufrufen.

call_pi.rb


puts Math.PI

Wenn Sie dieses Programm ausführen ...

terminal


% ruby call_pi.rb
Traceback (most recent call last):
math.rb:1:in `<main>': undefined method `PI' for Math:Module (NoMethodError)

Der Fehler lautet "Die Methode namens PI ist im Math-Modul nicht definiert". Da PI eine Konstante (Wert) und keine Methode ist, ist es möglich, dass ein solcher Fehler auftritt.


2. Beziehen Sie sich auf die "Run" -Methode der Tierklasse (selbst gemacht)

Schauen wir uns als nächstes ein Beispiel für "Methodenreferenz" an.

In diesem Beispiel schreiben wir zunächst ohne Namespace, um die Vorteile eines Namespace zu sehen.

run.rb


def run
  puts 'Laufen Sie auf 4 Beinen'
end

def run
  puts 'Laufen Sie auf zwei Beinen'
end

run
run

Lassen Sie uns dieses Programm ausführen.

terminal


% ruby run.rb
Laufen Sie auf zwei Beinen
Laufen Sie auf zwei Beinen

Wenn Sie denselben Methodennamen run wiederverwenden, wird auf die später definierte Methode verwiesen.

Definieren wir diese Runs, indem wir sie mit der Dog Human Klasse trennen.

run.rb


class Dog
  def self.run
    puts 'Laufen Sie auf 4 Beinen'
  end
end

class Human
  def self.run
    puts 'Laufen Sie auf zwei Beinen'
  end
end

Dog::run
Human::run

Lassen Sie uns dieses Programm ausführen.

terminal


% ruby run.rb
Laufen Sie auf 4 Beinen
Laufen Sie auf zwei Beinen

Auf eine Methode entlang des Namespace wurde verwiesen. Dies liegt daran, dass durch Definieren einer Klasse und Verwenden von :: jetzt ein Empfänger angegeben und aufgerufen werden kann, z. B. Auf Hundelauf verweisen.

Übrigens kann bei dieser Verwendung von :: (Methodenaufruf) durch ". (Dot)" ersetzt werden. Insbesondere ist es wie folgt.

run.rb


(Kürzung)
Dog.run
Human.run

terminal


% ruby run.rb
Laufen Sie auf 4 Beinen
Laufen Sie auf zwei Beinen

Es stellt sich heraus, dass es sich wie ein Klassenmethodenaufruf verhält.

Und wenn Sie :: als "Methodenaufruf" verwenden, können Sie mehr als eine Klasse oder ein Modul für den Empfänger angeben.

Zum Beispiel so.

sample.rb


10::times { |i| puts i }

terminal


% ruby sample.rb
0
1
2
3
4
5
6
7
8
9

Das Obige ist, wie man :: benutzt und was es bedeutet.


Zusammenfassung

Obwohl Rails praktisch ist, finde ich es überraschend schmerzhaft, wenn ich versuche, es selbst anzupassen. Und die meisten Ursachen sind "Ich kenne die Grundlagen von Ruby nicht".

Es ist wichtig, in kurzer Zeit aufzuholen, aber es ist auch wichtig, sich hinzusetzen und die Grundlagen zu verstehen. Ich werde versuchen, beim Lernen das Gleichgewicht zu halten.


Referenz

Recommended Posts

[Ruby / Namespace] Vertiefe ":: ← this", das du oft in Ruby siehst
Empfohlene Website für Fehler, die häufig auftreten
Fehlerprotokolle und Ausnahmebehandlung, die häufig im Java-Bereich angezeigt werden
Ruby-Methoden, die häufig in Rails verwendet werden
Die Geschichte eines arithmetischen Überlaufs, der in Ruby nicht auftreten sollte
Methoden, die ich in Ruby nützlich fand
[Rubiy] Was ist, wenn Sie jede Aussage in jede Aussage einfügen? ??