Seite 1 von 1
Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 26.06.2013 16:59
von gekkonier
Ich habe mir eben die neue Modulfunktion angesehen und bin der Meinung: grossartige Neuerung!
Code: Alles auswählen
DeclareModule Test
Declare.s getString()
EndDeclareModule
Module Test
testvar.s = "hallo"
Procedure.s getString()
ProcedureReturn Test::testvar
EndProcedure
EndModule
Debug Test::getString()
Hiermit kann ich eine Variable anlegen die privat verwendbar ist. Nehmen wir aber mal an ich möchte das Modul Test refaktorieren, d.h. den Namen des Modules ändern.
Jetzt müsste ich den Code des Modules nach
Test:: Fragmenten durchsuchen was mit der Suchen und Ersetzen Funktion ja nicht weiter schlimm wäre.
Viel bequemer und auch aus anderen Sprachen bekannt wäre es doch super, wenn man statt
ProcedureReturn Test::testvar z.B.
ProcedureReturn _self_::testvar oder ähnliches schreiben könnte. Es würde einem eben das suchen und ersetzen ersparen.
Gibts da was?

Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 26.06.2013 17:52
von Nino
gekkonier hat geschrieben:Gibts da was?

Innerhalb des Moduls brauchst Du dessen Namen (also hier "Test::") doch nicht davorzuschreiben.

Du musst die Variable nur z.B. als
Global deklarieren, damit sie in der Prozedur bekannt ist:
Code: Alles auswählen
DeclareModule Test
Declare.s getString()
EndDeclareModule
Module Test
Global testvar.s = "hallo"
Procedure.s getString()
ProcedureReturn testvar
EndProcedure
EndModule
Debug Test::getString()
Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 26.06.2013 18:03
von gekkonier
Ah, an das dachte ich erst gar nicht - ich dachte Global heisst global, also Programmweit.
Danke.
Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 26.06.2013 18:11
von ts-soft
gekkonier hat geschrieben:Ah, an das dachte ich erst gar nicht - ich dachte Global heisst global, also Programmweit.
Danke.
Ein Module kennt keine der globalen Variablen, Konstanen usw. des aufrufenden Codes. Es ist vollkommen gekapselt,
was ja im endeffekt der Sinn der Sache ist.
Nur was Du im DeclareModule Abschnitt global deklarierst, kann auch im übrigen Code genutzt werden.
Es kann auch Sinnvoll sein, ein DeclareModule Common anzulegen, wo man z.B. überall den Zugriff auf Konstanten
per UseModule ermöglicht, wenn ein Modul auf Globale des MainScopes angewiesen ist.
Hoffentlich ist das jetzt verständlich
Gruß
Thomas
Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 26.06.2013 18:15
von Nino
@gekkonier:
Global gilt jetzt anscheinend nur noch innerhalb des betr. Moduls oder außerhalb von jeglichem Modul (was ich ziemlich genial finde).
Code: Alles auswählen
Global x = 27
DeclareModule Test
Declare.s getString()
EndDeclareModule
Module Test
Debug x
Global testvar.s = "hallo"
Procedure.s getString()
ProcedureReturn testvar
EndProcedure
EndModule
Debug x
Debug testvar
Debug Test::getString()
Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 27.06.2013 14:07
von gekkonier
Danke für die Erklärungen - die Hilfe wird vermutlich im Zuge der Betas angepasst, oder? Ich habe darüber rein gar nix lesen könne, aber vielleicht auch falsch danach gesucht.
Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 27.06.2013 15:05
von NicTheQuick
Während der Betaphasen wird die deutsche Hilfe üblicherweise nicht aktualisiert. Allerdings kann man oftmals in der englischen schon die neuen Sachen finden, wenn auch nicht immer vollständig.
Re: Gibt es soetwas wie self für private Modulvariablen?
Verfasst: 27.06.2013 15:24
von gekkonier
Alles klar, in hab mein PB komplett in Englisch, da steht noch nix drinnen. Danke.