Seite 1 von 2

Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 13:59
von Mijikai
Ist es Möglich den Namen innerhalb des Macros irgendwie zusätzlich als String zu verwenden?

Code:

Code: Alles auswählen

EnableExplicit

Macro AddGlobal(a)
  Global.s a = a
  dummy() ;<- nur da um einen fehler zu erzeugen damit man sieht was im macro passiert
EndMacro

AddGlobal(Hallo)
Was das Macro tun soll:

Code: Alles auswählen

Global.s Hallo = "Hallo"

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 14:08
von RSBasic

Code: Alles auswählen

EnableExplicit

Macro DoubleQuote
  "
EndMacro

Macro AddGlobal(a)
  Global.s a = DoubleQuote#a#DoubleQuote
  ;dummy() ;<- nur da um einen fehler zu erzeugen damit man sieht was im macro passiert
EndMacro

AddGlobal(Hallo)

Debug Hallo

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 14:11
von Mijikai
Danke :allright:

Edit:

Funktioniert leider nicht im DeclareModule:

Code: Alles auswählen

DeclareModule TESTM
  
  Macro DoubleQuote
    "
  EndMacro
  
  Macro AddGlobal(a)
    Global.s a = DoubleQuote#a#DoubleQuote
    dummy() ;<- nur da um einen fehler zu erzeugen damit man sieht was im Macro passiert
  EndMacro
  
EndDeclareModule

Module TESTM
EndModule

TESTM::AddGlobal(Hallo)

Debug Hallo

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 14:35
von RSBasic
Scheint so, dass das Macro DoubleQuote außerhalb des Modules sein muss, damit es funktioniert.
Scheint ein Bug zu sein oder?

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 14:56
von Mijikai
RSBasic hat geschrieben:Scheint ein Bug zu sein oder?
Ich würde auch sagen das es ein Bug ist.

Leider sind meine Bug posts nicht gerne gesehen - hatte mal 2 die keine waren eingestellt
und wurde unfreundlich darauf hingewiesen.

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 15:18
von mk-soft
Ich denke das es kein Bug ist da das Macro DoubleQuote erst mit UseModule bekannt ist

Lösung...

Code: Alles auswählen

DeclareModule TESTM
  
  Macro DoubleQuote
    "
  EndMacro
  
  Macro AddGlobal(a)
    Global.s a = TESTM::DoubleQuote#a#TESTM::DoubleQuote
    ;dummy() ;<- nur da um einen fehler zu erzeugen damit man sieht was im Macro passiert
  EndMacro
  
EndDeclareModule

Module TESTM
EndModule

TESTM::AddGlobal(Hallo)

Debug Hallo

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 15:26
von Mijikai
Danke @mk-soft :)
gut das ich noch keinen Bugreport gepostet habe. :doh:

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 17:03
von NicTheQuick
Es mag vielleicht kein Bug sein, aber es ist wieder komplett anders wie es jede mir bekannte andere Programmiersprache macht, in denen Scopes richtig funktionieren. :wink:

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 20:04
von Sicro
Für mich ist es ebenfalls kein Bug.

Ich versuche es mal zu erklären.

Nehmen wir mal einen einfacheren Code:

Code: Alles auswählen

DeclareModule TestModule
  
  Macro TestMacro1
    Debug
  EndMacro
  
  Macro TestMacro2
    TestMacro1 "Test string"
  EndMacro
  
EndDeclareModule

Module TestModule
  
EndModule

TestModule::TestMacro2
Beim Kompilieren des obigen Codes ersetzt der Compiler diesen Code

Code: Alles auswählen

TestModule::TestMacro2
durch

Code: Alles auswählen

TestMacro1 "Test string"
Die Zeichenfolge "TestMacro1" kann nicht durch den Inhalt des Macros "TestMacro1" aufgelöst werden, weil das Macro nur innerhalb des Moduls existiert.

Schauen wir uns nun folgenden Code an:

Code: Alles auswählen

DeclareModule TestModule
 
  Macro TestMacro1
    Debug
  EndMacro
 
  Macro TestMacro2
    TestModule::TestMacro1 "Test string"
  EndMacro
 
EndDeclareModule

Module TestModule
 
EndModule

TestModule::TestMacro2
Hier wird der Code

Code: Alles auswählen

TestModule::TestMacro2
durch diesen ersetzt:

Code: Alles auswählen

TestModule::TestMacro1 "Test string"
Dieser Code funktioniert immer noch, weil wir auf das Macro "TestMacro1" im Modul "TestModule" verweisen. Der Compiler kann somit auch dieses Macro auflösen und wir erhalten diesen Code:

Code: Alles auswählen

Debug "Test string"

Re: Macro Variable auch als String nutzbar?

Verfasst: 08.02.2019 20:50
von Josh
Die erklärung von Sicro erscheint schlüssig, also würde ich es auch nicht als Bug bezeichnen. Intuitiv hätte ich aber gesagt, dass jedes Macro sofort aufgelöst wird, wobei dann:

Code: Alles auswählen

DeclareModule TestModule
  
  Macro TestMacro1
    Debug
  EndMacro
  
  Macro TestMacro2
    TestMacro1 "Test string"
  EndMacro
  
EndDeclareModule

Module TestModule
  
EndModule

TestModule::TestMacro2
im 'ersten Schritt' ersetzt wird durch:

Code: Alles auswählen

DeclareModule TestModule
  
  Macro TestMacro2
    Debug "Test string"
  EndMacro
  
EndDeclareModule

Module TestModule
  
EndModule

TestModule::TestMacro2