Foros del Web » Creando para Internet » Flash y Actionscript »

funcion que ejecuta funcion, +arguments. AS2

Estas en el tema de funcion que ejecuta funcion, +arguments. AS2 en el foro de Flash y Actionscript en Foros del Web. Esta es el codigo de una funcion que ejecuta: a otra, y a los parametros de esta otra Código: var miFuncion:Function = function(miVariable:Number,miVariable2:Number):Void { trace("miVariable= ...
  #1 (permalink)  
Antiguo 16/09/2007, 15:18
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 19 años, 2 meses
Puntos: 5
funcion que ejecuta funcion, +arguments. AS2

Esta es el codigo de una funcion que ejecuta: a otra, y a los parametros de esta otra
Código:
var miFuncion:Function = function(miVariable:Number,miVariable2:Number):Void {
    trace("miVariable= "+miVariable);
    trace("miVariable2= "+miVariable2);
    };


var funcionQueEjecutaFuncion:Function = function(queFuncion:Function):Void{
    queFuncion(/*aqui no se como hacerle*/);
};

funcionQueEjecutaFuncion(miFuncion2,"x","y","z",99);
Si se fijan funcionQueEjecutaFuncion solo esta declarada para recibir un parametro (el de la funcion que va a ajecutar) por que no sabemos cuantos parametros ocupara la funcion que se mandara llamar(en este caso si lo sabemos, pero funcionQueEjecutaFuncion sera generica y debera ejecutar funciones sin importar si tienen o no parametros)...[hasta aqui todo bien]... y se basa en la clase arguments de AS2 para deteminar los parametros totales pasados a la funcion y su longitud, etc. NOTA: arguments genera una array con cada parametro en una posicion.

digamos que funcionQueEjecutaFuncion es una funcon que no debe saber cuantos parametros le van a pasar, pero (con ayuda arguments) lo debera determinar y mandarlos dentro de quefuncion(); el problema es que no se como hacerlo, puesto que si hago:
Código:
trace(arguments); //output= [type Function],x,y,z,99
eso esta bien....pero si hago:
Código:
queFuncion(arguments);
envia la matriz completa(como un solo valor) y no se como hacerle para que envie cada posicion como un valor...de acuerdo al numero de posiciones que arguments detecte (y sin perder el tipo de dato que cada posicion tenga)

se que puedo hacer esto:
Código:
queFuncion(arguments[0], arguents[1]);
...pero estaria limitando a funcionQueEjecutaFuncion a mandar solo dos parametros...la logica que quiero es que se manden los parametros que arguments detecte (sin importar si son 0 o 100)

Lo que se me ha ocurrido hasta ahora es tal vez apoyarme en un for y en argumetnts.length... pero no se me ha ourrido nada para meterlos dentro del queFuncion();

Alguna idea, gracias.

PD: no es la primera vez que se ha hecho esto, esto existe, por ejemplo, en la funcion SetTimeout(nombre de funcion, tiempo de retraso, parametros indefinidos que se le pasaran a la funcion separados por comas);
__________________

  #2 (permalink)  
Antiguo 17/09/2007, 08:44
 
Fecha de Ingreso: mayo-2006
Mensajes: 77
Antigüedad: 17 años, 11 meses
Puntos: 1
Re: funcion que ejecuta funcion, +arguments. AS2

Hola

Creo que solo hay que poner un poco de orden:

Separa los argumentos: parametros para la funcion primaria, función a llamar y los valores a passar:

Código PHP:
var funcionQueEjecutaFuncion:Function = function(porejemplo:NumberqueFuncion:Function, valores:Object):Void{
//aqui utilizo 'porejemplo'.
    
queFuncion(valores);
}; 
Puedes así llamarla de una forma más comoda:

Código PHP:
funcionQueEjecutaFuncion(100funcion, {variable1:"tal"variable2:"pascual"}) 
Un saludo
__________________
¿ hace un SUDOKU ?
  #3 (permalink)  
Antiguo 17/09/2007, 23:42
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 19 años, 2 meses
Puntos: 5
Re: funcion que ejecuta funcion, +arguments. AS2

Grcias por la recomendacion acerca de como organizarlo, siempre es bueno.
sin embargo mi duda no era precisamente esa, igual y no me explique bien.

pero de hecho es simple, solo necesito que queFuncion( AQUI ) ;
envie los parametros que recibe..hasta ahora lo he logrado con arguments, pero como mencione envia la matriz completa como un solo valor.

Supongo eso es correcto, pero aqui pongo la linea de codigo mas actualizada:
Código:
var funcionQueEjecutaFuncion:Function = function(queFuncion:Function,misParametros:Object):Void{
    trace("funcionQueEjecutaFuncion5 se ha ejecutado");
    trace("quefuncion= "+queFuncion);
    trace("misParametros= "+misParametros);

    for(var i=0; i<arguments.length; i++){
        trace("arguments"+i+"= "+arguments[i]);
        miVariable[i]=arguments[i];
        }
    queFuncion( /*aqui no se como hacerle*/ );
    trace("\n");
    };    

funcionQueEjecutaFuncion(miFuncion2,{var1:"tal1",var2:2,var3:"tal3"},99);

El problema:
como introdusco/Sumo/Agrego/Adiciono
miVariable[i] en queFuncion( AQUI ) ; pero...en tiempo de ejecucion..es decir, de si i=99, que se agregueguen 99 variable detro de queFuncion( AQUI ); las cuales serian los parametros pero que queden separados por comas..para que se mantengan como datos separados.

Es algo similar a tratar cadenas, pero no precisamente por que involucra introducir datos dinamicamente dentro de una funcion.
Lo repito, tal vez, lo que pregunto no es posible, no lo se, pero considero que seria lo ideal para envirar N numero de parametros a otra funcion....

La otra forma que se me ocurre seria, enviar dentro de queFuncion( AQUI ); la matriz arguments completa..y que la funcion que la recibe la DESTRIPE de acuerdo al numero que parametros que detecte..lo cual es totalmente posible(y supongo mas sencillo)..pero eso resta AUTOMATIZACION a funcionQueEjecutaFuncion...puesto que habria que declarar
eso en cada funcion que vaya a ser llamado por funcionQueEjecutaFuncion.

Cualquier cosa estoy al pendiente y agradesco sus aportaciones.

__________________

  #4 (permalink)  
Antiguo 18/09/2007, 14:02
 
Fecha de Ingreso: mayo-2006
Mensajes: 77
Antigüedad: 17 años, 11 meses
Puntos: 1
Re: funcion que ejecuta funcion, +arguments. AS2

Hola

Es genial que seas tan obstinado, yo a veces lo soy, tanto o más… Pero creo (sin animo de ofender) que tendrías que echar un poco marcha atrás y volver a plantear en problema.

Yo lo veo así:
Los parámetros pasados se reunes en dos grupos:

1. Los que intervendrásn en el procedimiento de la función primaria, (en tu caso: la función a llamar, tiempos, número de ejecuciones…)
2. Los que recibirá la funcion secundaría.

La intención es crear una función con las ventajas de las clases (encapsulamiento, abstracción, herencia...), y ésta debe estar documentada y bien conocida por el usuario (programador). Por lo tanto, los parámetros que se le pasen (1) deben ser conocidos y no se pueden esperar diferentes a los estipulados (con algo más de código si que es posible obviar alguno).

Los parámetros que recibirá la función secundaría (2) deben pasar por la primaria sin ser alterados, ya que no tiene porque ‘saber’ los detalles de la función genérica a la que llama, y que si conoce el usuario, ya que debe ser él mismo quien la gestiona.

Por lo tanto yo le daría un formato así:

funcionPrimaria(funcion:Function, tiempo:Number, veces:Number, parámetros:Object)

o

funcionPrimaria(funcion:Function, parametros1:Object, parámetros2:Object)

En esta última das libertad a llamar a la función primaria con o sin parámetros, sería valida una llamada así: funcionPrimaria(miFuncion, {variable1:"tal", variable2:"pascual"} , miObjeto)

La función primaría se encargará de gestionar sus datos (como decía: validarlos, completarlos en caso de falta…) y llamar a la secundaria con sus parámetros (objeto), tal cual.


Un saludo.
__________________
¿ hace un SUDOKU ?
  #5 (permalink)  
Antiguo 19/09/2007, 03:08
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 19 años, 2 meses
Puntos: 5
Re: funcion que ejecuta funcion, +arguments. AS2

Código:
Yo lo veo así:
Los parámetros pasados se reunes en dos grupos:
 
1. Los que intervendrásn en el procedimiento de la función primaria, (en tu caso: la función a llamar, tiempos, número de ejecuciones…)
2. Los que recibirá la funcion secundaría.
eso es correcto.


Código:
La intención es crear una función con las ventajas de las clases (encapsulamiento, abstracción, herencia...)
mmm....mmmm.....creo que si



Código:
los parámetros que se le pasen (1) deben ser conocidos
para el caso de
Código:
var miFuncion:Function = function(miVariable:Number,miVariable2:Number):Void {
    trace("miVariable= "+miVariable);
    trace("miVariable2= "+miVariable2);
    };
los valores si son conocidos, pero mi intencion es adaptarla para cuando no se conoscan...tipo setTimeout(FuncionX:Function,cuanto:NUmber,paramet ro1:X,...,parametroN:Y);

Lo unico que quiero es algo digamos..estandar/ideal...un archivo.as, y que sirva para cualquier funcion secundaria (y se adapte a a las necesidades de esta)

parametrosA=los parametros que requiere la 1ra funcion, que luego se envian a la 2da funcion
parametrosAB=los parametros que requiere la 1ra funcion, y que luego seran enviados a la tercera (la externa al .AS en question) por la2da
parametrosB=los parametros que recibio la 2da de la de la 1ra; y que seran enviados a otra (externa al .AS en cuestion) via queFuncion( AQUI );

agradesco la ayuda [sobretodo por tomarte la molestia de leer los post que escribo, y todavia responderlos], pero empiezo a creer como que no la capto bien tu ayuda, es decir, por ejemplo, lo de la organizacion de parametrosAB en objetos (y enviar un solo objeto con todos los parametros)..Pues si, igual y eso es mejor que variables declaradas (y separadas por comas) como parametrosAB, pero eso nunca lo vi como un problema (puesto que eso lo resolvi con el metodo arguments). Y creo ya lo habia planteado antes con lo de estructurar los parametros dentro de un array y luego enviar ese array como parametro de queFuncion(); PARA ASI DESTRIPARLO AL VUELO "on the fly" por la funcion 3ra (la que los recibe por ultima vez)...pero lo evite con arguments.

Pero no lo veo como un SI: lo que planteas si es viable.
o NO lo que planteas no es viable: no puedes escribir variables dentro de queFuncion( AqUi ) en el tiempo en que se detecten la cantidad de parametrosAB...esa programacion no existe, puesto que no se puede por
ejemplo:
si se detectaron 3 posiciones en arguments, y tales valores fueron: "pelota", 24, "99"..entonces..
for(var x=0; x<arguments.length;x++){
queFuncion( arguments[x]+", " );
}
y una vez tarminado el for..
trace(queFuncion); //output quefuncion("pelota", 24, "99");
donde "pelota", 24 y "99" fueran 3 argumentos distintos.
Lo cual por supuesto, no es valido, pero esa es la idea pues, el concepto de como seria (ami modo de ver lo IDEAL, por no decir perfecto), se envia lo que el usuario envia, nada mas.

Solo quisiera entender, si el enviar SOLO la cantidad EXACTA de parametros pasada podria depenter de la 2da funcion o no; y (creo) que en caso de la respuesta ser no, entonces, por ende eso le tocaria a la 3ra.

O igual y aun no conosco tanto acerca de POO, que no tengo la menor idea de lo que me explicas. pero de cualquier forma lo agradesco, y por ultimo Saludos.

PD:alrededor de 1 hora escribiendo este post.
__________________

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:23.