Ich lerne gerade die Programmiersprache Ruby und ihr Webframework Ruby on Rails. Es gibt einige Symbole, die Sie oft darin sehen.
::
← Das ist es.
Devise :: RegistrationsController
und ActiveHash :: Base
und ActiveRecord :: Migration
usw.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.
Ü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? 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.
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.
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.
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 Run
s, 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.
::
← Dies ist ein Symbol, das angibt, wo eine Methode oder Variable abhängtObwohl 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.
Recommended Posts