Ruby/Zmienne globalne: 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 4:
 
<pre>
irb(main):001:0> $a
ruby> $foo
=> nil
rubyirb(main):002:0> $fooa = 5
=> 5
irb(main):003:0> $a
ruby> $foo
=> 5
</pre>
 
Zmienne globalne powinny być używane oszczędnie. Są one niebezpieczne, ponieważ mogą być zapisane z dowolnego miejsca programu. Nadmierne użycie zmiennych globalnych może sprawić, że izolowanie błędów będzie trudne, a ponadto może wskazywać, że projekt programu nie został gruntownie przemyślany. Ilekroć uznasz za niezbędne użycie zmiennej globalnej, upewnij się, że dasz jej opisową nazwę która nie będzie skłaniać do użycia jej potem niezgodnie z twoimi intencjami. Na przykład, nazwanie zmiennej globalnej "<tt>$fooa</tt>" będzie prawdopodobnie złym pomysłem.
 
Jedną z przyjemnych cech zmiennych globalnych jest to, że mogą być śledzone. Możesz określić procedurę, która będzie wywoływana za każdym razem, gdy wartość zmiennej ulegnie zmianie.
 
<pre>
rubyirb(main):004:0> trace_var :$xa, proclambda { puts "$xa wynosi teraz #{$xa}" }
=> nil
rubyirb(main):005:0> $xa = 50
$xa wynosi teraz 50
=> 0
5
</pre>
 
Linia 76:
 
W powyższym <tt>$_</tt> i <tt>$~</tt> mają zasięg '''lokalny'''. Choć ich nazwy sugerują, że powinny być globalne, to z wygody jak i pewnych historycznych zaszłości są używane w ten sposób.
 
Są jeszcze dwie specjalne zmienne systemowe:
 
{| class="wikitable"
! Nazwa
! Opis
|-
| <tt>__FILE__</tt>
| zwraca nazwę bieżącego pliku (nie skryptu, z którego został uruchomiony program)
|-
| <tt>__LINE__</tt>
| zwraca numer bieżącej linii
|}
 
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Zmienne|poprz=Zmienne|nastart=Ruby/Zmienne klasowe|nast=Zmienne klasowe}}