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:
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 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 |
ruby> inthandler = proc{ print "^C ha sido pulsado.\n" } #<Proc:0x401c4104> ruby> trap "SIGINT", inthandler nil |
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:
O de una forma más compacta todavía, Este formato abreviado es mas adecuado y legible cuando se escriben pequeños procedimientos anónimos.