2008-12-12 9 views
6

¿Hay alguna manera de que pueda hacer referencia a una var o const como el valor predeterminado para un argumento de la función en ActionScript 3.selección Valor predeterminado de argumento de la función en ActionScript 3

puedo definir valores por defecto como nula en serie, En t.

function a(b = null) { 
    blah... 
}

Pero lo que yo quiero hacer es

function a(b = function(){}) { 
    blah... 
}

la que parece que no habría una manera de hacerlo. Presumiblemente a través de una const

Respuesta

8

Por extraño que parezca que no puede hacer eso, al menos no pude hacer que funcione, no aceptará ninguna referencia a funciones estáticas como valor predeterminado.

Lo mejor que podía hacer era esto:

public function myFunction(functionArgument:Function = null):void { 
    if (functionArgument != null) { 
     functionArgument(); 
    } else { 
     defaultFunction(); 
    } 
} 

Como comentario que acabo de descubrir que, de hecho, puede declarar funciones de la siguiente manera:

public static const STATICFUNC:Function = function():void { trace("i'm static!") }; 

Pero eso parece que funciona de la misma manera como declararlos de la manera correcta, así que no tuve suerte allí tampoco.

+0

¿No es más convencional para escribir: pública función estática STATICFUNC(): void { trace ("Im estático!"); } –

+0

OOPS. Debe ser un error, pero no debe haber paréntesis después de functionArgument() y defaultFunction() ya que no queremos el resultado de la función sino una referencia a la función en sí misma. –

1

Los parámetros predeterminados deben ser constantes de tiempo de compilación, porque el compilador tiene que poner el valor predeterminado cuando se compila el código. Esto significa que las funciones estáticas, sin importar cuán predecibles sean, no pueden usarse como parámetros predeterminados. Las constantes de tiempo de compilación son valores que el compilador conoce inspeccionando su código, pero no realmente ejecutándolo.

1

Estoy de acuerdo con grapefrukt.

Pero en caso de que desee crear nuevos objetos a cada llamada que puede hacer esto:

function myFunction(f:Function = null):void 
{ 
    f = (f != null) ? f : function():void{ trace('new function'); } 
} 

o, por supuesto:

function myFunction(f:Function = null):void 
{ 
    f = (f != null) ? f : defaultFunction; 
} 

function defaultFunction():void 
{ 
    trace('default function invoked') 
} 
Cuestiones relacionadas