Ruby/Zmienne lokalne: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Linia 51:
</pre>
 
Zauważ, że nie można pominąć <tt>a = nil</tt> na początku. To przypisanie zapewnia, że zasięg zmiennej <tt>a</tt> obejmie <tt>p1</tt> i <tt>p2</tt>. Inaczej <tt>p1</tt> i <tt>p2</tt> utworzyłyby swoje własne zmienne lokalne <tt>a</tt>, i rezultatem wywołania <tt>p2</tt> byłby błąd "undefined local variable or method" (niezdefinowananiezdefiniowana zmienna lokalna lub metoda). Moglibyśmy użyć <tt>a = 0</tt>, ale użycie <tt>nil</tt> jest pewną uprzejmością wobec tych, którzy będą późniejprzyszłych czytaćczytelników nasznaszego kodkodu. Pokazuje to naprawdę jasno, że tylko ustanawiamy zakres, ponieważ wartość przypisywana do zmiennej nie jest zawiera żadnego znaczenia (<tt>nil</tt>).
 
Potężna zaleta obiektów procedurowych wypływa z ich zdolności do bycia przekazywanymi jako argumenty: współdzielone zmienne lokalne pozostają poprawne nawet wtedy, gdy przekazane są poza pierwotny zakres.
Linia 73:
</pre>
 
Ruby jest szczególnie sprytny jeśli chodzi o zakres. Ewidentnie w naszym przykładzie widać, że zmienna <tt>zawartosc</tt> jest współdzielona pomiędzy <tt>odczyt</tt> i <tt>zapis</tt>. Możemy również wytworzyć wiele par <tt>odczyt-zapis</tt> używając metody <tt>pudelko</tt> zdefiniowanej powyżej. Każda para współdzieli zmienną (lokalną!) <tt>zawartosc</tt>, ale pary nie kolidują ze sobą nawzajem. Dopóki istnieją obiekty procedurowe, zachowane są ich konteksty wywołania wraz z odpowiadającymi im zmiennymi lokalnymi.
 
<pre>
Linia 84:
ruby> odczyt_1.call
99
ruby> odczyt_2.call # nothingw istym inpudelku thisjeszcze boxnic yetnie ma
nil
</pre>