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

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Linia 112:
</source>
 
Jak widzimy w ostatniej linii, obiekty lambda mogą być anonimowe (nie nadajemy im żadnej nazwy). O obiektach anonimowych powiemydowiemy więcejsię wwkrótce [[Ruby/Klasy|rozdziale o klasach]]więcej. Natomiast w [[Ruby/Zmienne lokalne|rozdziale o zmiennych lokalnych]] zobaczyszzobaczymy, że obiekty procedurowe i domknięcia zachowują kontekst (stan zmiennych lokalnych) w jakim zostały wywołane.
 
=== Różnice między lambdą a <tt>Proc.new</tt> ===
 
Obiekty procedurowe można również tworzyć używając konstrukcji <tt>Proc.new</tt>. Bardziej szczegółowo omówimy tę konstrukcję w [[Ruby/Klasy|rozdziale dotyczącym klas]]. Tutaj jedynie powiemyprzedstawimy opewne pewnych różnicachróżnice pomiędzy lambdami a obiektami utworzonymi za pomocą <tt>Proc.new</tt>.
 
Surowe obiekty <tt>Proc</tt> (ang. ''raw procs''), czyli utworzone poprzez <tt>Proc.new</tt>, posiadają jedną niedogodność: użycie instrukcji <tt>return</tt> powoduje nie tyle wyjście z domknięcia obiektu procedurowego, co wyjście z całego bloku, w którym domknięcie było wywołane. Może to powodować niespodziewane wyniki działania naszych programów, dlatego zaleca się używanie lambd, a nie surowych obiektów <tt>Proc</tt>.