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