Scripting: Tags
Introductie
Een tag is een prefix voor een variabele die de compiler vertelt de variabele in bepaalde situaties speciaal te behandelen. Je kunt tags gebruiken om af te dwingen waar een variabele wel/niet gebruikt mag worden of hoe operatoren zich gedragen.
Er zijn twee soorten tags: sterke tags (hoofdletter) en zwakke tags (kleine letter). Zwakke tags kunnen in sommige gevallen stilzwijgend naar tagloos worden geconverteerd; sterke tags niet. Een impliciete tagwijziging leidt meestal (bij sterke tags altijd) tot een waarschuwing.
Sterke tags
Voorbeelden in SA:MP:
Float:
File:
Text:
Deze kunnen niet vrij gemengd worden met andere typen zonder waarschuwing.
Zwakke tags
Zwakke tags gedragen zich grotendeels hetzelfde, maar toewijzing aan een tagloze bestemming geeft geen waarschuwing; omgekeerd wel.
new
Strong:myStrong,
weak:myWeak,
myNone;
myNone = myStrong; // waarschuwing
myNone = myWeak; // geen waarschuwing
myWeak = myNone; // waarschuwing
Functieparameters volgen dezelfde regels.
Voorbeelden van zwakke tags: bool:, filemode:, floatround_method:.
Gebruik
Declareren
Declareer een variabele met een tag door de tag te prefixen. Vooraf definiëren is niet nodig.
new Mytag:myVariable;
Functies
Tags kunnen op parameters en returntypes:
Float:GetValue(File:fHnd, const name[])
{
// ...
}
Operatoren
Operatoren kunnen per tag overgeladen worden, bijvoorbeeld voor Float: zodat rekenwerk correct gebeurt.
stock Float:operator=(Mytag:oper)
{
return float(_:oper);
}
Overwrite
Met _: kun je een tag overschrijven (detaggen) als een functie een tagloos argument verwacht. Wees voorzichtig: detaggen van Float: naar integer geeft onbedoelde waarden (bitpatroon i.p.v. conversie).