No con este ejemplo...
Pero si he hecho pruebas en su día.
En funciones críticas yo usaría el método tradicional que propongo. En otras circunstancias sería cuestión de gustos.
Los codeblock al ser un tipo de dato se pueden pasar como parámetros de funciones lo cual le da muchísima potencia a nuestros programas.
Fue una revolución el cambio de la macrocompilación por codeblocks.
En la época en que se creó el tipo de dato CodeBlock había muy pocos lenguajes que lo tuvieran... desde hace relativamente poco tiempo otros lenguajes lo han incorporado con el nombre de "Closures" o "funciones anónimas".
Pero incluso ahora con el uso de la clase Symbol se pueden hacer cosas muy chulas:
- Code: Select all Expand view RUN
PROCEDURE Main()
LOCAL oSym := Symbol():New( "QOUT" )
? "Now test the :Exec() method"
oSym:Exec( "This string is being printed by QOUT" )
oSym:Exec( "which is being invoked by the :Exec()" )
oSym:Exec( "method in the Symbol class." )
?
? "symbol name: ", oSym:name
? "Comparing QOut symbol with xOut symbol"
? oSym:IsEqual( Symbol():New( "xOut" ) )
? "done!"
?
RETURN
Y el no va mássssssssssss podemos usar punteros a funciones, lo cual va un paso más allá de los codeblocks:
- Code: Select all Expand view RUN
procedure main()
local pFunc := @alert()
pFunc:exec( "Esto es una prueba de puntero a la funcion Alert()" )
Alert( pFunc:name() ) // Devuelve el nombre de la funcion apuntada
pFunc := @upper()
pruebaPuntero( pFunc ) // Llama a una funcion pasando un puntero a funcion
return
procedure pruebaPuntero( p )
alert( p:exec( "esto lo veras en mayusculas" ) )
return
Harbour tiene muchos secretos que lo convierten en un lenguaje super potente y de futuro...
Te imaginas Harbour en la web?
Pues eso es posible con
Mod_Harbour!!!