Estoy escribiendo una función que recorre un poco de información en una página de registro. Dentro del ciclo estoy tratando de llamar funciones basadas en una matriz. Lo que estoy teniendo problemas con esto es llamar a las funciones correctamente, porque estoy tratando de incorporar una variable como parte del nombre de la función.¿Cómo puedo llamar un nombre de variable como parte de un nombre de función en ColdFusion?
Aquí está mi código:
<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>
Por lo tanto, tienen tres funciones: validate_email, validate_uname, validate_pass. Si lanzo un writeoutput(), e intento dar salida a los resultados de la función, no funcionan.
Así es que el código:
<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>
Ahora, entiendo que cuando se está utilizando writeoutput(), y que está llamando a una función, es necesario el símbolo de hash en cada extremo. Por lo tanto, digamos que lo escribo así:
writeoutput('#validate_#func[2]#(#fields[i]#)#');
No va a funcionar, porque el símbolo de hash segundo anula la llamada de función. Esta es la forma en la función última instancia, debe buscar (ejemplo de correo electrónico):
writeoutput('#validate_email('[email protected]')#');
¿Cómo puedo reemplazar a 'e-mail' (#validate_email ...) con el nombre de la variable adecuada, y todavía tienen la función de trabajo? ¡Espero haber hecho esto comprensible!
No es un error en CF, Peter: simplemente nunca se ha implementado. Es posible que desee revisar su comentario a tal efecto. De lo contrario, una respuesta puntual. –
No debería haber diferencia entre 'Variables.Bob()' y 'Variables ['Bob']()'; sin embargo, el segundo arroja un error. Llamo a eso un error en la notación de corchetes, no una característica no implementada. –
Gracias por esto. Ambas sugerencias que recibí funcionan de maravilla. Soy nuevo en CF, así que voy con la multitud y uso esto en lugar de otro. El otro es un poco más fácil, pero si hay un problema, ¡no quiero entrar en eso! ¡Gracias de nuevo! –