Macro und Module

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Macro und Module

Beitrag von CSHW89 »

Hi Leute,

ich musste gerade feststellen, dass Module in Macros wohl nicht so ganz funktionieren. Zumindest finde ich das folgende Verhalten von PB schon recht komisch. Mag auch an falscher Denkweise meinerseits liegen, aber normalerweise hab ich mit Macros keine Schwierigkeiten. Sehe hier gleich zwei Bugs...

Meiner Meinung sollte folgender Code schon funktionieren:

Code: Alles auswählen

Macro InitContainer(_type_)
  DeclareModule Container#_type_
    
    Structure struc
      List elements._type_()
    EndStructure
    
  EndDeclareModule
  
  Module Container#_type_
  EndModule
  
EndMacro

Macro InitStack(_type_)
  InitContainer(_type_)
  
  Structure struc Extends Container#_type_::struc  ;; <<<==== HIER
  EndStructure
EndMacro

InitStack(Integer)
Anscheinend ersetzt PB an der Stelle 'HIER' das '_type_' nicht durch 'Integer'. Wenn ich das provisorisch mal da hinschreibe...:

Code: Alles auswählen

Macro InitContainer(_type_)
  DeclareModule Container#_type_
    
    Structure struc
      List elements._type_()
    EndStructure
    
  EndDeclareModule
  
  Module Container#_type_
  EndModule
  
EndMacro

Macro InitStack(_type_)
  InitContainer(_type_)
  
  Structure struc Extends ContainerInteger::struc
  EndStructure
EndMacro

InitStack(Integer)
... sagt PB nun, dass das Modul ContainerInteger nicht deklariert wurde. Dies müsste der Compiler aber zuvor gesehen haben, da meiner Meinung InitContainer zuerst ersetzt und kompiliert werden müsste.
Wenn ich das InitContainer dann raus nehme aus dem Macro und vor dem InitStack schreibe (was meiner Meinung exakt den gleichen Code entsprechen müsste)...:

Code: Alles auswählen

Macro InitContainer(_type_)
  DeclareModule Container#_type_
    
    Structure struc
      List elements._type_()
    EndStructure
    
  EndDeclareModule
  
  Module Container#_type_
  EndModule
  
EndMacro

Macro InitStack(_type_)
  
  Structure struc Extends ContainerInteger::struc
  EndStructure
EndMacro

InitContainer(Integer)
InitStack(Integer)
... funktioniert es. Allerdings finde ich das nicht wirklich zufrieden stellend.
Hab ich da doch ein Denkfehler, oder funktionieren Module in Macro zur Zeit einfach nicht?

lg Kevin


edit: Ach ja, ganz vergessen: Win7 64-Bit, PB 5.21 32-Bit
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Macro und Module

Beitrag von Chimorin »

Ôhm, ist doch richtig, dass es das nicht gibt. Ich hab noch nie gehört, dass man den Namen von irgendwas (Variable etc.) wâhrend der Laufzeit verändern kann... Klärt mich bitte auf. Wäre ja cool, wenn das gehen würde.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Macro und Module

Beitrag von Danilo »

CSHW89 hat geschrieben:Meiner Meinung sollte folgender Code schon funktionieren:

Code: Alles auswählen

Macro InitContainer(_type_)
  DeclareModule Container#_type_
    
    Structure struc
      List elements._type_()
    EndStructure
    
  EndDeclareModule
  
  Module Container#_type_
  EndModule
  
EndMacro

Macro InitStack(_type_)
  InitContainer(_type_)
  
  Structure struc Extends Container#_type_::struc  ;; <<<==== HIER
  EndStructure
EndMacro

InitStack(Integer)
Wenn Du nach '#_type_' noch ein '#' schreibst, wird es richtig zusammen gefügt.

Code: Alles auswählen

Macro InitContainer(_type_)
  DeclareModule Container#_type_
    
    Structure struc
      List elements._type_()
    EndStructure
    
  EndDeclareModule
  
  Module Container#_type_
  EndModule
  
EndMacro

Macro InitStack(_type_)
  InitContainer(_type_)
  
  Structure struc Extends Container#_type_#::struc  ;; <<<==== HIER noch ein # nach _type_
  EndStructure
EndMacro

InitStack(Integer)

x.struc
Debug ListSize( x\elements() )
AddElement( x\elements() )
Debug ListSize( x\elements() )

y.ContainerInteger::struc
Debug ListSize( y\elements() )
AddElement( y\elements() )
Debug ListSize( y\elements() )
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Macro und Module

Beitrag von CSHW89 »

@Bananenfreak: Nein, hier wird nichts zur Laufzeit verändert. Das erste Codebeispiel sollte eigentlich funktionieren.

@Danilo: Vielen Dank :allright: . Ist aber meiner Meinung schon ein Bug, da das '#' eigentlich nur zwischen Wörtern geschrieben werden muss. In so einem Fall wäre es ja z.B. falsch:

Code: Alles auswählen

Macro test(_param_)
  a = 1+#_param_
EndMacro
test(2)
Aber egal, ich bin glücklich, dass es zumindest ein "Workaround" dafür gibt.

lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Macro und Module

Beitrag von Chimorin »

Achso, klar, Makros werden ja vor dem Kompillieren wieder eingefügt. :doh:

Wie gut, dass es dazu in der Hilfe nur 2 Sätze gibt, aber kein einfaches Beispiel.
Bild

- formerly known as Bananenfreak -
Antworten