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:
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
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.

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.

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
durch
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
durch diesen ersetzt:
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:
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