Sto scrivendo una funzione che scorre attraverso alcune informazioni su una pagina di registrazione. All'interno del ciclo sto provando a chiamare funzioni basate su un array. Quello che sto avendo problemi è in realtà chiamare correttamente le funzioni, perché sto cercando di incorporare una variabile come parte del nome della funzione.Come posso chiamare un nome di variabile come parte di un nome di funzione in ColdFusion?
Ecco il mio codice:
<cfscript>
fields = arraynew(1);
fields[1] = 'r_email';
fields[2] = 'r_uname';
fields[3] = 'r_pass';
for(i = 1; i lte arraylen(fields); i = i + 1)
{
func = fields[i].split('r_');
func = 'validate_#func[2]#(#fields[i]#)';
}
</cfscript>
Così, ho tre funzioni: validate_email, validate_uname, validate_pass. Se lancio un writeoutput() e provo a generare i risultati della funzione, non funzionano.
Ecco il codice:
<cfscript>
fields = arraynew(1);
fields[1] = 'r_email';
fields[2] = 'r_uname';
fields[3] = 'r_pass';
for(i = 1; i lte arraylen(fields); i = i + 1)
{
func = fields[i].split('r_');
func = 'validate_#func[2]#(#fields[i]#)';
writeoutput('#func#');
}
</cfscript>
Ora, capisco che quando si sta utilizzando writeoutput(), e si sta chiamando una funzione, è necessario il simbolo cancelletto su entrambe le estremità. Quindi, diciamo che scrivo in questo modo:
writeoutput('#validate_#func[2]#(#fields[i]#)#');
Non funzionerà, perché il simbolo cancelletto secondo annulla la chiamata di funzione. Questo è come la funzione dovrebbe infine guardare (ad esempio e-mail):
writeoutput('#validate_email('[email protected]')#');
Come posso sostituire 'e-mail' (#validate_email ...) con il corretto nome della variabile, e hanno ancora il lavoro di funzione? Spero di averlo reso comprensibile!
Non è un bug in CF, Peter: non è mai stato implementato. Potresti voler rivedere il tuo commento in tal senso. Altrimenti una risposta puntuale. –
Non ci dovrebbero essere differenze tra 'Variables.Bob()' e 'Variables ['Bob']()' - tuttavia, il secondo lancia un errore. Io chiamo un bug nella notazione delle parentesi, non una caratteristica non implementata. –
Grazie per questo. Entrambi i suggerimenti che ho ricevuto funzionano alla grande. Sono nuovo di CF, quindi vado con la folla e uso questo piuttosto che l'altro. L'altro è un po 'più facile, ma se c'è un problema con esso non voglio entrare in quello! Grazie ancora! –