Ruby/Zmienne lokalne: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m nav |
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
||
Linia 1:
Zmienna lokalna posiada nazwę zaczynającą się małą literą lub znakiem podkreślenia (<tt>_</tt>). Zmienne lokalne nie posiadają, w przeciwieństwie do zmiennych globalnych i zmiennych instancji, wartości <tt>nil</tt> przed inicjalizacją:
<pre>
ruby> $foo
nil
Linia 7 ⟶ 8:
ruby> foo
ERR: (eval):1: undefined local variable or method `foo' for main(Object)
</pre>
Pierwsze przypisanie, które robisz do zmiennej lokalnej odgrywa rolę jakby deklaracji. Jeżeli Odwołasz się do niezainicjalizowanej zmiennej lokalnej, interpreter Rubiego nie będzie pewny, czy odwołujesz się do nieprawdziwej zmiennej. Możesz, dla przykładu, zrobić błąd w nazwie metody. Dlatego zobaczyłeś raczej ogólną informację o błędzie.
Zazwyczaj zasięgiem zmiennej lokalnej jest jedno z poniższych:
* cały skrypt (chyba że zastosowano jedno z powyższych)
W następny przykładzie <tt>defined?</tt> jest operatorem, który sprawdza czy identyfikator został zdefiniowany. Zwraca on opis identyfikatora, jeśli jest on zdefiniowany lub, w przeciwnym razie, <tt>nil</tt>. Jak widzisz, zasięg zmiennej <tt>bar</tt> jest ograniczony lokalnie do pętli. Gdy pętla zostaje przerwana <tt>bar</tt> jest niezdefiniowany.
<pre>
ruby> foo = 44; puts foo; defined?(foo)
44
Linia 27 ⟶ 30:
45
nil
</pre>
Procedure objects that live in the same scope share whatever local variables also belong to that scope. Here, the local variable bar is shared by main and the procedure objects p1 and p2:
|