Kurzer hat geschrieben:Ich deklariere die Konstanten in meiner ModuleDatei zweimal (einmal außerhalb und einmal innerhalb des Modulscopes), weil ich...
kurzer hat geschrieben:... bei Nutzung des Moduls ohne UseModule einfach...
GraphGadget::Draw(*GHnd, #GG_DATAMODE_INTEGER) schreiben kann und nicht die umständliche Variante
GraphGadget::Draw(*GHnd, GraphGadget::#GG_DATAMODE_INTEGER), wenn ich die beiden Konstanten innerhalb des Moduls deklarieren würde.
Es ging in dem Fall darum die Konstanten ohne vorheriges UseModule() bei Verwendung der expliziten Adressierung des Moduls (ModuleName::) mit dem reinen Konstantennamen verwenden zu können.
Aber trotzdem gut hier so viel andere Vorschläge versammelt zu sehen. Danke.
Allerdings immer mit der Gefahr, dass du irgendwo einen Fehler machst und die gleiche Konstante mit zwei unterschiedlichen Werten belegst.
Das kann so ziemlich der Worst-Case sein, da solche Fehler oft während der Entwicklung nicht sofort auffallen und erst nach Wochen, Monaten oder gar Jahren zum Vorschein kommen und man dann erkennen muss, dass alle bisherigen Berechnungen, Datensätze, o.ä. falsch sind.
PB kapselt die Konstanten des Main Scopes ebenfalls, da es auch hier zu Überschneidungen kommen könnte. Das ist eigentlich sogar ziemlich gut durchdacht. Gehe davon aus, dass aus irgendwelchen Gründen im Main Scope bereits #GG_DATAMODE_INTEGER deklariert ist, was passiert dann innerhalb des Moduls, wenn die gleiche Konstante nochmal deklariert wird? Das ist in dem Fall zwar unwahrscheinlich, die Konstante könnte aber auch einfach #ALL, #NONE, etc heißen. Ich persönlich arbeite immer mit dem Modulscope ohne zusätzliche Abkürzungen, z.B. GraphGadget::#DATAMODE_INTEGER und habe immer ein "Main" Modul. So bin ich es auch aus anderen Programmiersprachen gewohnt.
Vielleicht solltest du nochmal den Vorschlag von Sicro mit dem Macro anschauen. Den finde ich für deine Vorgehensweise recht sinnig, da du weiterhin die Konstanten zweimal deklariert hast, aber nur einmal im Code pfllegen musst und dadurch etwaige Fehler vermeidest:
Code: Alles auswählen
; Modul Datei
; -----------
DeclareModule Test
Macro OptionsMacro
Enumeration Options
#Option_1
#Option_2
#Option_3
EndEnumeration
EndMacro
OptionsMacro
EndDeclareModule
Module Test
Debug #Option_3
EndModule
Test::OptionsMacro
; -----------
; Main Datei
; ----------
; Include Modul Datei
Debug #Option_2
; ----------