+54 911 66509220

Noticias

Noticias
23 Feb 2015

Tutorial de Ruby – Parte 22 – Objetos promedios

/
Creado por
/
Comentarios0

Capítulo 19. Objetos procedimiento

 

A menudo es deseable tener la posibilidad de definir respuestas específicas a sucesos inesperados. Resulta que esto se consigue con gran sencillez si podemos pasar un bloque de código a otros métodos, lo que significa que deseamos tratar el código como si fuesen datos.

 

Un objeto procedimiento nuevo se obtiene utilizando proc:

 

ruby> quux = proc {

ruby| print “QUUXQUUXQUUX!!!\n”

ruby| }

#<Proc:0x401c4884>

 

Ahora quux referencia a un objeto y como las mayoría de los objetos, tiene un comportamiento que se puede invocar.

 

Concretamente, podemos pedir que se ejecute a través de su método call

 

ruby> quux.call

QUUXQUUXQUUX!!!

nil

 

Luego, después de todo esto. ¿Podemos utilizar quux cómo un argumento de un método? Ciertamente.

 

ruby> def run ( p )

ruby| print “Vamos a llamar a un procedimiento … \n”

ruby| p.call

ruby| print “Finalizado. \n”

ruby| end

nil

ruby> run quux

 

Vamos a llamar a un procedimiento …

QUUXQUUXQUUX!!!

Finalizado.

nil

 

El método trap nos permite asignar una respuesta personalizada a cualquier señal del sistema.

 

ruby> inthandler = proc{ print “^C ha sido pulsado.\n” }

#<Proc:0x401c4104>

ruby> trap “SIGINT”, inthandler

nil

 

Normalmente, al pulsar ^C se sale del intérprete. Ahora se imprime un mensaje y el intérprete sigue ejecutándose, así no se pierde el trabajo realizado. (No nos encontramos atrapados en el intérprete para siempre; todavía se puede salir tecleando exit o pulsando ^D.)

 

Una observación final antes de pasar a otros temas: no es necesario dar al objeto procedimiento un nombre antes de asociarlo a una señal. Un objeto procedimiento anónimo equivalente se asemejaría a:

 

ruby> trap “SIGINT”, proc{ print “^C ha sido pulsado.\n” }

#<Proc:0x401c4104>

 

O de una forma más compacta todavía,

 

ruby> trap “SIGINT”, ’print “^C ha sido pulsado.\n”’

#<Proc:0x401c3d44>

 

Este formato abreviado es mas adecuado y legible cuando se escriben pequeños procedimientos anónimos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

* Copy This Password *

* Type Or Paste Password Here *

11.678 Spam Comments Blocked so far by Spam Free Wordpress

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>