El otro dÃa estaba intentando hacer una función en actionscript que me llamara a otra función después de una pausa aleatoria. Dado que pensaba utilizarla para varias cosas distintas dentro del mismo programa, la llamada a la segunda función debÃa ser un parámetro, al estilo de setInterval (no utilicé éste por diversas razones). La llamada a la función serÃa tal que asÃ:
pausaAleatoria(funcionLlamada, valorMin, valorMax);
Entonces me topé con un problema que me ha surgido muchas veces y hasta ahora no habÃa podido resolver: ¿Cómo ejecuto la función cuyo nombre he pasado como parámetro dentro de la otra? Dado que es lo que hace precisamente setInterval, resulta lógico que sea posible hacerlo…
La manera más obvia de hacerlo me parecÃa pasarle el nombre de la función como string y hacer varios tipos de eval (eval("funcionLlamada" + ()), eval ("funcionLlamada()") asà que probé muchas cosas en esta lÃnea, pero nada funcionaba. Varias búsquedas por la web también resultaron infructuosas.
Ahora que por fin me han dado la solución (gracias, natalia) resulta, como casi todo una vez q lo sabes, ridÃculamente sencillo. No hay que hacer ningún eval ni prestidigitación de ningún tipo. Un ejemplo:
// esta es una función cualquiera
function a () {
trace ("soy la funcion a");
}
// y desde otra función vamos a llamar a la primera
function b (funcionLlamada) {
trace ("soy la funcion b");
funcionLlamada();
}
// y lo ejecutamos tal que asÃ.
b(a);
// en la ventana de trace aparecerá
// soy la funcion b
// soy la funcion a
La clave (que yo no alcanzaba a ver) está en que los paréntesis que ponemos después de una función son un operador y no un simbolo arbitrario. Igual que el signo + entre dos valores significa “suma esto”, el operador () significa “ejecuta esto”
Quizás este problema solo lo haya tenido yo por mi idiosincrática manera de programar, pero aquà lo dejo como referencia para mi y todo el que lo quiera. Seguro que alguna vez a alguien le sirve.
Nota: El tema de pasarle parámetros es igual de facil si conocemos a priori el número de parámetros que queremos pasarle. Basta con ponerlos dentro del operador (); pero dado que lo que querÃa era una función genérica, esto no me sirve . Si consigo (o alguien me cuenta) la solución para pasarle un número indeterminado de parámetros, también la pongo por aquÃ, no sea que se me vuelva a olvidar. Buenas tardes.