DeclareModule optional?
Verfasst: 11.12.2014 11:08
				
				Hier stand mal was von CodeCommander. Aber er wollte seinen Post unbedingt löschen.
			Richtig. Weil Fred das syntaktisch so festgelegt hat. Das hat aber nichts mit dem "sehen" an sich zu tun.CodeCommander hat geschrieben:Dieser Post baut hierauf auf: Hinweise + Vorschläge f. bessere Befehls-Beschreibungen etc.Und wie?? >> Modul benötigt einen DeclareModule Abschnitt, bevor es erstellt wird.Nino hat geschrieben:Natürlich kann PB das Modul auch ohne DeclareModule sehen.
Zweck von DeclareModule ist es festzulegen, welche Teile des Modul öffentlich und welche Teile des Moduls privat sind.CodeCommander hat geschrieben:Der wäre?Nino hat geschrieben:Sinn und Zweck von DeclareModule ist ein anderer.
Referenz-Handbuch hat geschrieben:Nur auf die im DeclareModule Abschnitt deklarierten Elemente kann von außerhalb des Moduls zugegriffen werden. Der gesamte Code im Module Abschnitt wird "privat" für dieses Modul gehalten.
Code: Alles auswählen
DeclareModule bla
EndDeclareModule
Module bla
	Procedure hui()
		Debug "buh"
	EndProcedure
	
	hui()
EndModuleNicTheQuick hat geschrieben:Ich glaube so ganz ohne öffentliche Funktionen, Variablen oder Strukturen macht ein Modul wenig Sinn, oder?
Code: Alles auswählen
EnableExplicit
DeclareModule PluginMap
	Declare.i addPlugin(moduleName.s)
	Declare.i pluginCount()
	Declare.s getPlugin(index.i)
EndDeclareModule
Module PluginMap
	Global NewMap pluginMap.i()
	
	Procedure.i addPlugin(pluginName.s)
		pluginName = LCase(pluginName)
		If (FindMapElement(pluginMap(), pluginName))
			Debug "[ERR] Module already added: '" + pluginName + "'."
			ProcedureReturn #False
		EndIf
		ProcedureReturn AddMapElement(pluginMap(), pluginName)
	EndProcedure
	
	Procedure.i pluginCount()
		ProcedureReturn MapSize(pluginMap())
	EndProcedure
	
	Global Dim plugins.s(0)
	
	Procedure.s getPlugin(index.i)
		Protected i.i
		
		If (ArraySize(plugins()) <> pluginCount())
			ReDim plugins(pluginCount())
			ForEach pluginMap()
				plugins(i) = MapKey(pluginMap())
				i + 1
			Next
		EndIf
		
		If (index >= pluginCount() Or index < 0)
			ProcedureReturn ""
		EndIf
		
		ProcedureReturn plugins(index)
	EndProcedure
EndModule
DeclareModule bla
EndDeclareModule
Module bla
	PluginMap::addPlugin(#PB_Compiler_Module)
	
	Runtime Procedure.i init()
		Debug "Modul bla initialisiert."
	EndProcedure
EndModule
DeclareModule TollerEffekt
EndDeclareModule
Module TollerEffekt
	PluginMap::addPlugin(#PB_Compiler_Module)
	
	Runtime Procedure.i init()
		Debug "Modul TollerEffekt initialisiert."
	EndProcedure
EndModule
; Initialisiere alle Plugins
Define.i pluginCount.i = PluginMap::pluginCount()
Define.i i
For i = 0 To pluginCount - 1
	CallFunctionFast(GetRuntimeInteger(PluginMap::getPlugin(i) + "::init()"))
Next