¿Cuál es la sintaxis flexible (ActionScript3) para el tipo de función con valor de función?

StackOverflow https://stackoverflow.com/questions/74649

  •  09-06-2019
  •  | 
  •  

Pregunta

¿Cuál es la sintaxis para declarar un tipo para mi generador de funciones de comparación en un código como el siguiente?

var colName:String = ""; // actually assigned in a loop
gc.sortCompareFunction = function() : ??WHAT_GOES_HERE??
{
   var tmp:String = colName;
   return function(a:Object,b:Object):int { return compareGeneral(a,b,tmp); };
}();
¿Fue útil?

Solución

¿No es la "Función" un tipo de datos?

Otros consejos

Para comprender cuál es el tipo de datos, debemos saber cuál es el resultado previsto de la devolución.Necesito ver el bloque de código para compareGeneral y todavía no creo que esto ayude.Tiene dos retornos dentro de la misma función "gc.sortCompareFunction", creo que esto es incorrecto ya que el retorno obtiene un valor y luego actúa como un comando de interrupción, lo que significa que el resto de cualquier elemento dentro del mismo bloque de funciones se ignora.El problema es que no sé cuál es la devolución prevista y tampoco sé si Flash lo sabe.Puede usar * como tipo de datos, pero esto solo debería usarse en situaciones específicas.En esta situación, creo que solo necesita un valor de retorno que simplemente devuelva cualquier valor de compareGeneral.

Ahora bien, si se trata de un compareGenerator, realmente debería devolver un valor booleano VERDADERO o FALSO, o un int 0 o 1, usemos el primero.También creo que podemos usar una función menos.Como no he visto todo su código y no estoy exactamente seguro de lo que intenta lograr, lo siguiente es hipotético.

function compareGeneral(a:object,b:object):Boolean
{
   //Check some property associated to each object for likeness.
   if(a.someAssignedPropery == b.someAssignedPropery)
   {
      return true;
   }
   return false;
}
var objA:Object = new Object();
objA.someAssignedProperty = "AS3";
objB.someAssignedProperty = "AS3";

compareGeneral(objA,objB);

En este caso compareGeneral(objA,objB);devuelve verdadero, aunque todavía no hemos hecho nada útil con él.Aquí tienes una manera de utilizarlo.Recuerde que devuelve un valor verdadero o falso para que podamos tratarlo como una variable.

if(compareGeneral(objA,objB)) //same as if(compareGeneral(objA,objB)) == true)
{
   trace("You have found a match!");
   //Here you can call some other function or set a variable or whatever you require functionality wise based on a match being found.
}
else
{
  trace("No match could be found!");
}

Espero que esto pueda ayudarle a comprender los tipos de datos y los valores de retorno.No sé qué estabas haciendo con tmp, pero generalmente las funciones que devuelven un valor tratan con esa cosa y solo con esa cosa, por lo que es mejor que la función de comparación compare una cosa con la otra y esa sea la extensión de la llamada. .Cualquier funcionalidad que necesite con tmp puede ir dentro de su propia función o método y ser invocada cuando sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top