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? :mrgreen:

Re: Gibt es soetwas wie self für private Modulvariablen?

Verfasst: 26.06.2013 17:52
von Nino
gekkonier hat geschrieben:Gibts da was? :mrgreen:
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 :wink:

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.