Seite 1 von 1

Module - Nameskonflikt

Verfasst: 03.06.2014 14:45
von STARGÅTE
Hallo,

ich möchte mich nun auch mal etwas näher mit den Modulen befassen, doch gleich zu Anfang kommt ein Problem, von dem eigentlich gesagt wird, dass es Verhindert werden soll: Namenskonflikt

Wenn ich zB ein Modul definieren möchte was im Speicher liest und schreibt, dann hätte ich es gerne so gemacht:

Code: Alles auswählen

Memory::WriteFloat(Memory, Float)
Nur leider kann ich die Procedure garnicht definieren, weil es dann einen Konflikt mit der File-Lib gibt (WriteFloat).

Wenn ich nun aber doch wieder Memory_WriteFloat() definieren muss, dann bringt mir auch das Modul nichts.
Ober gibt es eine möglichkeit eine Procedure gleich mit dem Modulnamen zu definieren?

Re: Module - Nameskonflikt

Verfasst: 03.06.2014 15:14
von PMV
Das hat Danilo schon zu beginn im englischen Forum angemerkt:
http://www.purebasic.fr/english/viewtop ... =3&t=56574


Kurz gesagt, Namenskonflikte mit PB-Befehlen bleiben. Egal ob Modul oder nicht.

Re: Module - Nameskonflikt

Verfasst: 03.06.2014 17:14
von NicTheQuick
Wenn man ein bisschen trickst, geht es zumindest so:

Code: Alles auswählen

DeclareModule Memory
	Declare PokeF_(*memory, float.f)
	Macro PokeF(memory, float)
		Memory::PokeF_(memory, float)
	EndMacro
EndDeclareModule
Module Memory
	Procedure PokeF_(*memory.Float, float.f)
		Debug "test"
		*memory\f = float
	EndProcedure
EndModule

Define test.f = 0.0

PokeF(@test, 1.0)

Debug test

Memory::PokeF(@test, 1.0)

Debug test
Bei der anderen Variante, die ich mir überlegt habe, kommt allerdings ein merkwürdiger Fehler:

Code: Alles auswählen

DeclareModule Memory
	Declare PokeF_(*memory, float.f)
	Macro PokeF(memory, float)
		Memory::PokeF_(memory, float)
	EndMacro
EndDeclareModule
Module Memory
	UndefineMacro PokeF
	Procedure PokeF_(*memory.Float, float.f)
		Debug "test"
		PokeF(*memory, float)
	EndProcedure
EndModule

Define test.f = 0.0

PokeF(@test, 1.0)

Debug test

Memory::PokeF(@test, 1.0)

Debug test