Ruby/Domknięcia i obiekty procedurowe: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Nie podano opisu zmian
Linia 1:
== Obiekty procedurowe ==
 
Dobrze jest być w staniemóc sformułować odpowiedzi na niespodziewane zdarzenia. Jak się okazuje, najłatwiej to osiągnąć, jeśli możemy przekazywać całe bloki kodu jako argumenty do innych metod, to znaczy, że chcemy móc tak traktować kod, jakby to były dane.
 
Obiekt procedurowy jest formułowany z użyciem słowa kluczowego <tt>proc</tt>:
 
<pre>
ruby> quuxbla = proc {
| puts "QUUXQUUXQUUXBLABLABLA!!!"
| }
#<Proc:0x4017357c>
</pre>
 
To, na co wskazuje <tt>quuxbla</tt> jest obiektem, i jak większość obiektów, posiada zachowanie które może zostać wywołane. Możemy poprosić nasz obiekt aby wykonał je, wywołując jego metodę <tt>call</tt>:
 
<pre>
ruby> quuxbla.call
BLABLABLA!!!
QUUXQUUXQUUX!!!
nil
</pre>
 
TakA więc, po tym wszystkim, czy można użyć <tt>quuxbla</tt> jako argumentu metody? Oczywiście.
 
<pre>
ruby> def runwywolaj( p )
| puts "AboutPrzed towywołaniem call a procedureprocedury..."
| p.call
| puts "There:Procedura finishedzakończona."
| end
nil
ruby> runwywolaj quuxbla
Przed wywołaniem procedury...
About to call a procedure...
BLABLABLA!!!
QUUXQUUXQUUX!!!
Procedura zakończona.
There: finished.
nil
</pre>
Linia 39:
 
<pre>
ruby> inthandleruchwyt = proc{ puts "nacisnieto ^C was pressed." }
#<Proc:0x401730a4>
ruby> trap "SIGINT", inthandleruchwyt
#<Proc:0x401735e0>
</pre>
Linia 50:
 
<pre>
ruby> trap "SIGINT", proc{ puts "nacisnieto ^C was pressed." }
nil
</pre>
Linia 57:
 
<pre>
ruby> trap "SIGINT", 'puts "nacisnieto ^C was pressed."'
nil
</pre>