Usare i moduli in cristallo
Man mano che la vostra applicazione cresce, vorreste passare da un grande file .cr alla separazione del vostro codice in file più piccoli.
Potete usare require dal vostro file .cr principale per aggiungere codice da altri file:
richiedere "./tools/*"
Questa dichiarazione aggiungerà codice dalla directory degli strumenti, relativa al vostro file .cr principale.
Questo aiuterà a separare la tua applicazione "fisicamente", ma potrebbe anche essere desiderabile separarla logicamente - forse parte del codice può essere riutilizzato in altri progetti, e forse vuoi anche evitare collisioni di namespace.
Cos'è una collisione dello spazio dei nomi?
Se il nome di un metodo, di una classe o di una costante viene usato due volte in diversi file sorgente nello spazio dei nomi globale, si avrà una collisione.
Come fa il compilatore a sapere quale metodo/classe vuoi effettivamente tra i due che sono definiti?
Per evitare collisioni di namespace separate il vostro codice in moduli.
per esempio:
modulo Debug
classe SampleClass
fine
SAMPLE_CONSTANT = "qualche valore"
macro samplemacro(some_variable)
1TP3Alcuni codici macro
fine
1TP3Il tuo codice va qui
fine
Accesso al codice nei moduli
Ora potete accedere al codice (dopo aver richiesto il file in cui è definito il modulo) in questo modo:
sampleinstance = Debug::SampleClass.new()
p Debug::SAMPLE_CONSTANT
Debug.samplemacro
Notate che una macro viene chiamata con la sintassi ".", non con la sintassi ":". Potete considerarla come un metodo del Modulo.
Compresi i moduli
Se, d'altra parte, trovate la notazione aggiuntiva noiosa, potete includere il modulo usando il nome del suo metodo in questo modo:
include Debug
allora sarete in grado di accedere a metodi, classi, costanti e macro senza alcuna notazione aggiuntiva - come se il codice fosse letteralmente copiato e incollato nel vostro altro file sorgente:
sampleinstance = SampleClass.new()
p SAMPLE_CONSTANT
samplemacro