Verwendung von Modulen in crystal
Wenn Ihre Anwendung wächst, möchten Sie Ihren Code nicht mehr in eine große .cr-Datei, sondern in kleinere Dateien aufteilen.
Sie können require aus Ihrer Haupt-.cr-Datei verwenden, um Code aus anderen Dateien hinzuzufügen:
require "./tools/*"
Diese Anweisung fügt Code aus dem Verzeichnis tools hinzu, relativ zu Ihrer Haupt-.cr-Datei.
Dies hilft, Ihre Anwendung "physisch" zu trennen, aber es kann auch wünschenswert sein, sie logisch zu trennen - vielleicht kann ein Teil des Codes in anderen Projekten wiederverwendet werden, und vielleicht wollen Sie auch Namensraumkollisionen vermeiden.
Was ist eine Namensraumkollision?
Wenn ein Methoden- oder Klassenname oder ein Konstantenname zweimal in verschiedenen Quelldateien im globalen Namensraum verwendet wird, kommt es zu einer Kollision.
Woher soll der Compiler wissen, welche der beiden definierten Methoden/Klassen man eigentlich will?
Um Namespace-Kollisionen zu vermeiden, teilen Sie Ihren Code in Module auf.
zum Beispiel:
Modul Fehlersuche
Klasse SampleClass
Ende
SAMPLE_CONSTANT = "irgendein Wert"
macro samplemacro(einige_variable)
#somit Makro-Code
Ende
1TP3Ihr Code geht hier
Ende
Zugriff auf Code in Modulen
Jetzt können Sie auf den Code wie folgt zugreifen (nachdem Sie die Datei, in der das Modul definiert ist, angefordert haben):
sampleinstance = Debug::SampleClass.new()
p Debug::SAMPLE_CONSTANT
Debug.Beispielmakro
Beachten Sie, dass ein Makro mit einer "."-Syntax und nicht mit einer ":"-Syntax aufgerufen wird. Sie können es als eine Methode des Moduls betrachten.
Einschließlich Module
Wenn Sie jedoch die zusätzliche Notation als lästig empfinden, können Sie das Modul mit seinem Methodennamen wie folgt einbinden:
Debug einschließen
dann können Sie auf die Methoden, Klassen, Konstanten und Makros ohne zusätzliche Notation zugreifen - als ob der Code buchstäblich per Copy & Paste in Ihre andere Quelldatei eingefügt wurde:
sampleinstance = SampleClass.new()
p SAMPLE_CONSTANT
Muster-Makro