SOBRECARGA DE FUNCIONES

  • 1 Respuestas
  • 57 Vistas

bardellisalud

  • Novato
  • *
  • Mensajes: 1
SOBRECARGA DE FUNCIONES
« : septiembre 18, 2017, 00:32:26 am »
Estimado Ing. Boris ...

Le quería consultar si Pawn admite sobrecarga de funciones.  Por lo que estuve leyendo en general NO, pero lo solucionan con algunos trucos.  Le paso un ejemplo que encontré en internet:

http://forum.sa-mp.com/showthread.php?p=3459023

Quería saber si algo así se podría funcionar en mi PLC, ya que no se si el firmware es totalmente compatible con el Pawn del ejemplo.

Muchas Gracias.

Saludos.

Christian.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1748
  • Soporte Técnico
Re:SOBRECARGA DE FUNCIONES
« Respuesta #1 : septiembre 18, 2017, 12:54:32 pm »
Buenos días Christian,

Podrías hacer como explica ese tutorial, aunque Pawn no es un lenguaje diseñado para sobrecargar funciones con diferentes argumentos.

Al final del tutorial, te dice en resumen lo que tenes que hacer si usas variables del tipo (tag) Float o bool:

Código: (Pawn) [Seleccionar]
stock MyFunc({Float,bool}:var1,{Float,bool}:var2,tagid1 = tagof(var1),tagid2 = tagof(var2))
{
if(tagid1 == tagof(Float:))
{
    if(tagid2 == tagof(Float:))
    {
print("Float Float");
    }
    else if(tagid2 == tagof(bool:))
    {
            print("Float Bool");
    }
    else
    {
        print("Ahhh...you are a bad programmer.You ignored the compiler's tag mismatch warning!!!");
    }
}
else if(tagid1 == tagof(bool:))
{
    if(tagid2 == tagof(Float:))
    {
            print("Bool Float");
    }
    else if(tagid2 == tagof(bool:))
    {
            print("Bool Bool");
    }
    else
    {
        print("Ahhh...you are a bad programmer.You ignored the compiler's tag mismatch warning!!!");
    }

}
else
{
    print("Ahhh...you are a bad programmer.You ignored the compiler's tag mismatch warning!!!");
}
}

Como ves en ese código, comprueba con "if" el tipo de variable (Float o bool) y aplica el código correspondiente. En tu caso, deberías crear tags para la variables que quieras comprobar y hacer algo análogo al ejemplo.

Es un truco, pero al menos de mi punto de vista si no es estrictamente necesario, se presta a confusión, ya que hay que prestar mucha atención al "truco" de usar los "tags" y definiciones precisas del lenguaje Pawn. Esto es fácil de olvidar y puede ser tedioso de entender cuando debas mantener el código para hacer cambios a futuro.

Dependiendo de lo que quieras hacer, puede convenirte este truco. También, tal vez, es preferible buscar una solución alternativa donde crees una función, con un argumento constante para especificar la operación a realizar, o crear dos o mas funciones con nombres convenientes y llamarlas según convenga. Pero no te salvas de hacer un "if" para comprobar antes el tipo de operación y ejecutar así el código adecuado para la operación.

Quedamos disposición.

Saludos





« Última Modificación: septiembre 18, 2017, 12:57:11 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Atención: Desde el 1 de enero al 25 de enero de 2018, cerramos por vacaciones.
Tenga en cuenta para sus pedidos y/o consultas.