Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Groovy: primeros pasos

casiano - lunes 10/05/2010

Hola,

En el ejemplo que sigue intercepto el método toString()

de la clase Integer.


Cuando ejecuto el programa adjunto
la llamada

                     println n

no produce una llamada a

                     n.toString()

como yo esperaba.

¿Hay algo que esté haciendo mal?

Un  saludo


Casiano

**********************

#!/usr/bin/env groovy

Scanner sc = new Scanner(System.in)

Integer n
print "Give me an unsigned integer: "
if (sc.hasNextInt()) n = sc.nextInt() else {
 System.err.println ("Error: number expected, found '${sc.next()}' instead")
 System.exit(1)
}


def names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six',
            'seven', 'eight', 'nine' ]

def aux = { Integer k ->
 m = ''
 while (k != 0) {
   r = k % 10
   k = k / 10
   m = "${names[r]} $m"
 }
 m
}

Integer.metaClass.toString = {-> aux(delegate) }

Integer.metaClass.'static'.

toString = { Integer m -> aux(m) }

String.metaClass.'static'.valueOf = { Integer m-> '666' }

println n.toString()
println n                 // no es interceptado!
println Integer.toString(n)
println String.valueOf(n)


********************

Produce esta salida:

*************************



~/Lgroovy/mop$ groovy InterceptingIntegerViaMetaClass.groovy
Give me an unsigned integer: 432
four three two
432
four three two
666

*************************
Responder al hilo | Volver al foro "Groovy: primeros pasos" | Volver a los foros