Comunidad de diseño web y desarrollo en internet online

acerca de funcion que ejecuta funciones cualquiera

Citar            
MensajeEscrito el 14 Sep 2007 10:35 pm
ok, que tal.
Voy a explicar la idea de esto, de lo quiero lograr y lo que no he logrado.
a ver si alguien me entiende y me puede ayudar, esta algo largo, pero es sencillo de entender

Se trata de una funcion que (entre otras cosas) ejecuta otra funcion, lo hago asi:

Código :

//Funcion que recibe parametro, y no devuelve nada
var miFuncion2:Function = function(miVariable:Number):Void {
   trace("miFuncion2 se ha ejecutado");
   trace("miVariable= "+miVariable);
   };

//Funcion que ejecuta como funcion, el nombre que recibe como parametro 
var funcionQueEjecutaFuncion:Function = function(queFuncion:Function):Void{
   trace("funcionQueEjecutaFuncion se ha ejecutado");
   trace("queFuncion= "+queFuncion);
   queFuncion();
   trace("\n")
   };

funcionQueEjecutaFuncion(miFuncion2);

...pero obviamente no ejecuta el parametro de la funcion que ejecuta...
Y lo que deseo hacer es que (ademas de ejecutar le la funcion que recibe como parametro) ejecute el parametro o parametros de la funcion que ejecuta...

por que?

Pues porque es una funcion para AS2, que como mencione, (entre otras cosas) ejecutara: una funcion y todos sus parametros....digamos que de esta manera PRETENDO llamarla:
funcionQueEjecutaFuncion(miFuncion2(99));

pero no se deberia ejecutar asi:
funcionQueEjecutaFuncion(miFuncion2,99);
[obviando que el segundo parametro seria el parametro de la primera funcion, lo cual si es posible de hacer pero no conveniente]

por que?

por que en el titulo de este post puse ...que ejecuta funciones cualquiera ...o sea genericas, de las cuales no conocemos sus parametros, y eso no serviria por que tendria que declarar la funcion mas o menos asi:

Código :

var funcionQueEjecutaFuncion:Function = function(miFuncion2:Function,miVariable:Number) {
}

o sea, conociendo el numero de parametros que requiere la funcion que va a ejecutar


PUES ESO ES TODO.
ya lo intente de esta manera:

Código :

/*Funcion que ejecuta como funcion el nombre que recibe como parametro,
   pero que ademas, ejecuta los parametros de la funcion que recibe*/ 
var funcionQueEjecutaFuncion2:Function = function(queFuncion:Function):Void{
   trace("funcionQueEjecutaFuncion2 se ha ejecutado");
   trace("quefuncion= "+queFuncion);
   //queFuncion;
   trace("\n");
   };
   
funcionQueEjecutaFuncion2(miFuncion2(111));   


pero lo que hace es que primero ejecuta la funcion que tiene dentro [esto: miFuncion2(111) ] y lo hace correctamente pero no en el ambito de funcionQueEjecutaFuncion2..puesto que funcionQueEjecutaFuncion2 no la reconoce..

por ejempo hacer:
estaFuncionNoExiste(miFuncion2(111));

en efecto, ejecuta a miFuncion2...pero no por una orden de estaFuncionNoExiste();...por que en efecto estaFuncionNoExiste NO EXISTE.

cualquier aportacion a mi duda, sera bien agradecida.
O aguna recomendacion de que tecnica utilizar, o aunque sea, que me digan que lo quiero hacer no se puede.

SALUDOS. ^^

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Sep 2007 10:47 pm
PD: la razon por la que quiero hacer esa funcion es para guardarla como funcionQueEjecutaFuncion2.As en incluirla en cualquier documento.. con el objetivo de integrarla con otras funciones...ejemplo:

una funcion que escriba texto en una instancia, digamos asi:

Código :

escribirTexto = function(queInstancia,texto){
queInstancia.text = texto;
}
/*
eso se ejecutaria de manera simple asi:
escribirTexto(instancia7,"pepe");
*/


Pero imaginemos

Código :

funcionQueEjecutaFuncion2(20, escribirTexto(instancia7,"pepe"));


Ejecutara esa funcion 20 veces veces...es solo un ejemplo.

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Sep 2007 03:34 am
ok ,ya me se ocurrio algo, y le algo mas de funcionalidad.
Se trata de llamar a la funcion asi:

var misParametros = new Array;
misParametros=["a","1",2]
funcionQueEjecutaFuncion(miFuncion2,misParametros);

o sea, funcionQueEjecutaFuncion tendria dos parametros, el primero seria el nombre de la funcion que va a ejecutar y el segundo seria una arreglo(vector) donde cada posicion tendra un parametro..para esta idea considero que lo mejor es guardar los parametros en un arreglo en vez de una variable, para que cada parametro introducido dentro del vector conserve su tipo de dato...

bueno, entonces la funcion me queda asi:

Código :

var funcionQueEjecutaFuncion3:Function = function(queFuncion:Function,misParametros:Array):Void{
   var parametrosQueFuncion;

   trace("funcionQueEjecutaFuncion3 se ha ejecutado");
   trace("quefuncion= "+queFuncion);
   queFuncion(misParametros[2]);
   
/*de momento esto es experimental
   for(var y=0; y<misParametros.length; y++){
   parametrosQueFuncion = misParametros[y]+", ";
   trace(misParametros[y]);
   trace(parametrosQueFuncion);
*/
   }
   trace("\n");
   };


hasta ahora puedo ejecutar cualquier parametro...el PROBLEMA se que dentro de la funcion tengo que especificar cual de ellos...estoy probando/pensando en un for para ver como le hago para guardar o introducir los datos del array misParametros dentro de queFuncion( AQUI ); de una manera que conseven su tipo de dato y separados por comas....
a ver si a alguuien se le ocurre algo, pero voy a vanzando que es lo bueno.

PD: otra solucion a esto, y la que considero ideal, seria hacer algo como la funcion SetTimeout...pues por ejemplo sus pametros son SetTimeout(nombreDeFucion:Function,DelayTime:Number,A partir de aqui puedes introducir un numero indefinido de parametros separados por comas que se le aplicaran a nombreDeFucion:Function);...pero pues eso si esta todavia algo lejos para mi.

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Sep 2007 05:07 pm
En Flash le podés pasar un número indeterminado de parámetros a una función y éstos se almacenan en un Array (creo que args, pero no estoy seguro). Esa es la solución más elegante.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 15 Sep 2007 06:15 pm
Que tal, pues gracias, se me habia ocurrido algo asi para determinar la cantidad de parametros pasados...pero en realidad no crei que existiera algo asi. graias.

Por cierto, la razon por la que se me ocurrio hacer esto de" funcion que ejecuta funciones y los parametros de la funcion que se ejecuta" se basa en tu "efecto de maquina de escribir".
Por que cuado yo lei ese tutorial quise hacerlo de nuevo pero mas sencillo basado en una "funcion que ejecuta funciones" que yo ya tenia...pero que no "ejecutaba los parametros de la funcion que ejecutaba".

tal funcion 'mas sencilla' (o mas rapida) era asi:

Código :

var escribir:Function = function(numero){
   //trace("i= "+i);
   trace("FUNCION ESCRIBIR SE EJECUTO !!!"+"\nnumero enviado= "+numero);
   var numero:Number;
   contenedorTxt[numero].campoDeTexto.text += miArray[i];
   trace("miArray[i]= "+miArray[i]);
   trace("contenedorTxt[numero]= "+_root.contenedorTxt[numero]);
   i++;
   };

..entonces el problema ocurrio cuando habia que pasarle parametros a la funcion escribir (como instancia y texto..), pero bueno.

Saludos.

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Sep 2007 06:22 pm
Que tal, pues gracias, se me habia ocurrido algo asi para determinar la cantidad de parametros pasados...pero en realidad no crei que existiera algo asi. graias.

Por cierto, la razon por la que se me ocurrio hacer esto de" funcion que ejecuta funciones y los parametros de la funcion que se ejecuta" se basa en tu "efecto de maquina de escribir".
Por que cuado yo lei ese tutorial quise hacerlo de nuevo pero mas sencillo basado en una "funcion que ejecuta funciones" que yo ya tenia...pero que no "ejecutaba los parametros de la funcion que ejecutaba".

tal funcion 'mas sencilla' (o mas rapida) era asi:

Código :

Código :

var miTexto:String = "La Ilíada es sobre la Cólera de Aquiles...";
var miArray:Array = new Array;
miArray = miTexto.split("");

var escribir:Function = function(numero){
   var numero:Number;
   contenedorTxt[numero].campoDeTexto.text += miArray[i];
   i++;
   };



..entonces el problema ocurrio cuando habia que pasarle parametros a la funcion escribir (como instancia y texto..), pero bueno.

Por cpucpu

82 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.