Modul: Private Konstante in Prozedurdeklaration verwenden?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Modul: Private Konstante in Prozedurdeklaration verwenden?

Beitrag von Kurzer »

Ich möchte in einem Modul eine private Konstante als Default-Parameter für eine öffentliche Prozedur nutzen.
Die Prozedur soll ordnungsgemäß deklariert werden.

Code: Alles auswählen

DeclareModule MyMod
	EnableExplicit
	
	Declare Test(sParam.s)
	; Declare Test(sParam.s = #Default_Param)
EndDeclareModule

Module MyMod
	#Default_Param = "none"
	
	Procedure Test(sParam.s = #Default_Param)
		Debug sParam
	EndProcedure
EndModule
Hat jemand eine Idee wie man das hin bekommt ohne dass der Compiler meckert?
Momentan ist entweder die Konstante in der Deklaration nicht bekannt oder... wenn ich dort z.B. sParm="" eintrage, dann stimmt Deklaration mit Prozedur nicht überein.
In beiden Fällen kann man es nicht kompilieren.

Folgende Lösung geht zwar, aber ist ein bisschen uncharmant:

Code: Alles auswählen

	Procedure Test(sParam.s = "")
		If sParam = ""
			sParam = #Default_Param
		EndIf
		
		Debug sParam
	EndProcedure
Gruß Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Modul: Private Konstante in Prozedurdeklaration verwende

Beitrag von NicTheQuick »

Man kann es mit einem extra Module tricksen:

Code: Alles auswählen

DeclareModule MyModConst
	#Default_Param = "none"
EndDeclareModule

Module MyModConst
EndModule


DeclareModule MyMod
	EnableExplicit
	
	UseModule MyModConst
	
	Declare Test(sParam.s = #Default_Param)
EndDeclareModule

Module MyMod
	Procedure Test(sParam.s = #Default_Param)
		Debug sParam
	EndProcedure
EndModule

; Das geht nicht
;Debug MyMod::#Default_Param

; Das auch nicht
;UseModule MyMod
;Debug #Default_Param
Bild
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Modul: Private Konstante in Prozedurdeklaration verwende

Beitrag von Kurzer »

Danke Nic. So werde ich es erstmal machen.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten