Condividi tramite


Argomenti macro GDL

Il contenuto di una definizione di macro può fare riferimento a tutti, alcuni o nessuno dei relativi argomenti formali, in particolare per le definizioni di macro di valore, in cui è possibile creare più definizioni di macro di valore all'interno di un singolo costrutto di macro con un singolo elenco di argomenti formali condiviso da tutte le definizioni. In questo caso, una definizione può fare riferimento ad alcuni degli argomenti formali, mentre un altro riferimento none.

Se una definizione di macro omette riferimenti a uno o più argomenti formali, l'elenco di parametri fornito quando la macro viene fatto riferimento può indicare i parametri mancanti in base a virgole (,) che non separano nulla.

Ad esempio, il riferimento alla macro seguente usa solo il quinto argomento. I primi quattro vengono omessi.

*Attribute: =Macro(,,,, =PassedInMacroRef)

Non è necessario indicare parametri omessi finali. Se la macro nell'esempio precedente ha dichiarato 10 argomenti formali, ma ha fatto riferimento solo al quinto argomento, l'esempio precedente sarebbe comunque un modo valido per fare riferimento alla macro.

Per le macro valore, non è consentito alcun spazio vuoto tra il riferimento alla macro e il relativo elenco di parametri. Questa sintassi consente al parser di distinguere tra un riferimento alla macro che non usa argomenti che vengono seguiti da un elenco di parametri simile a un elenco di parametri da un riferimento alla macro che usa un elenco di parametri.

Si consideri, ad esempio, l'esempio di codice seguente.

*Attrib:   =Macro1 (=Macro2)       *%  is 2 separate macro references
    while
*Attrib:   =Macro1(=Macro2)        *% you are passing Macro2 as a 
    *%  parameter  to Macro1.

Se le definizioni di macro vengono annidate, gli argomenti formali possono essere usati solo dal contenuto della macro che ha dichiarato gli argomenti. Il contenuto delle definizioni di macro annidate non può fare riferimento agli argomenti definiti dalla macro racchiusa.

I riferimenti alle macro che si verificano all'interno di una definizione di macro possono contenere elenchi di parametri che si chiamano macro che richiedono gli elenchi di parametri. Non è tuttavia possibile specificare un elenco di parametri per i riferimenti agli argomenti formali. Ad esempio, la voce seguente all'interno di una definizione della macro a blocchi è accettabile.

*Attrib1: =Macro1(=Macro2(=Macro3(=Arg1, =Arg2)))

Nell'esempio precedente = MacroN rappresenta un riferimento a una macro valore definita in precedenza e =ArgN rappresenta un riferimento a un argomento formale.

Tuttavia, l'esempio di codice seguente non è una voce accettabile.

*Attrib2: =Arg1(=Arg2, =Arg3(=Macro1, =Macro2))   *%  Not Valid !

Se un riferimento alla macro corrisponde a un nome di argomento formale dichiarato dalla macro, è possibile presupporre che sia un riferimento a tale argomento formale, indipendentemente dal fatto che esista una macro reale con tale nome. È possibile evitare ambiguità di questo tipo usando un qualificatore dello spazio dei nomi con il riferimento alla macro. Tuttavia, non è possibile usare i qualificatori dello spazio dei nomi con argomenti formali.

Per le macro di valore, se non è stato dichiarato alcun elenco di argomenti formali nel costrutto *Macros, qualsiasi riferimento alle macro definite all'interno non deve essere seguito con un elenco di parametri. Tale elenco non verrà considerato parte del riferimento alla macro.

Si consideri, ad esempio, se =Macro1 è definito dall'esempio di codice seguente.

*Macros:   NoArgList
{
Macro1:  "a Value macro with no argument list"
Macro2:  "a Value macro with no argument list"
Macro3:  "a Value macro with no argument list"
}

Il riferimento alla macro seguente verrà quindi interpretato come tre riferimenti macro separati e non correlati.

*attribute:  =Macro1(=Macro2, =Macro3)

Il parser non interpreterà (=Macro2, =Macro3) per essere un elenco di parametri per =Macro1. Questo comportamento mantiene la compatibilità con le versioni precedenti con gli ID Criteri di gruppo correnti.