Lua - zmienne
Zmienna to nic innego jak nazwa nadana obszarowi pamięci, którym nasze programy mogą manipulować. Może zawierać różne typy wartości, w tym funkcje i tabele.
Nazwa zmiennej może składać się z liter, cyfr i znaku podkreślenia. Musi zaczynać się od litery lub podkreślenia. Wielkie i małe litery są różne, ponieważ Lua rozróżnia wielkość liter. W Lua istnieje osiem podstawowych typów wartości -
W Lua, chociaż nie mamy zmiennych typów danych, mamy trzy typy oparte na zakresie zmiennej.
Global variables - Wszystkie zmienne są uważane za globalne, chyba że zostały wyraźnie zadeklarowane jako lokalne.
Local variables - Gdy typ jest określony jako lokalny dla zmiennej, jej zakres jest ograniczony funkcjami wewnątrz ich zakresu.
Table fields - Jest to specjalny typ zmiennej, która może przechowywać wszystko oprócz nil, w tym funkcje.
Definicja zmiennej w Lua
Definicja zmiennej oznacza poinformowanie interpretera, gdzie i ile ma utworzyć pamięć dla zmiennej. Definicja zmiennej ma opcjonalny typ i zawiera listę co najmniej jednej zmiennej tego typu w następujący sposób -
type variable_list;
Tutaj, type jest opcjonalnie lokalny lub określony typ, dzięki czemu jest globalny, a variable_listmoże składać się z jednej lub więcej nazw identyfikatorów oddzielonych przecinkami. Tutaj pokazano kilka ważnych deklaracji -
local i, j
local i
local a,c
Linia local i, jzarówno deklaruje, jak i definiuje zmienne i i j; co instruuje interpretera, aby utworzył zmienne o nazwach i, j i ograniczał zakres do lokalnego.
Zmienne można zainicjować (przypisać wartość początkową) w ich deklaracji. Inicjator składa się ze znaku równości, po którym następuje stałe wyrażenie w następujący sposób -
type variable_list = value_list;
Oto kilka przykładów:
local d , f = 5 ,10 --declaration of d and f as local variables.
d , f = 5, 10; --declaration of d and f as global variables.
d, f = 10 --[[declaration of d and f as global variables.
Here value of f is nil --]]
W przypadku definicji bez inicjatora: zmienne ze statycznym czasem trwania przechowywania są niejawnie inicjowane wartością nil.
Deklaracja zmiennej w Lua
Jak widać w powyższych przykładach, przypisania zmiennych wielokrotnych są zgodne z formatem lista_zmiennych i lista_wartości. W powyższym przykładzielocal d, f = 5,10 mamy d i f na liście_zmiennych i 5 i 10 na liście wartości.
Przypisywanie wartości w Lua odbywa się jak pierwsza zmienna w lista_zmiennych z pierwszą wartością w liście_wartości i tak dalej. Stąd wartość d wynosi 5, a wartość f to 10.
Przykład
Wypróbuj poniższy przykład, w którym zmienne zostały zadeklarowane u góry, ale zostały zdefiniowane i zainicjowane wewnątrz funkcji głównej -
-- Variable definition:
local a, b
-- Initialization
a = 10
b = 30
print("value of a:", a)
print("value of b:", b)
-- Swapping of variables
b, a = a, b
print("value of a:", a)
print("value of b:", b)
f = 70.0/3.0
print("value of f", f)
Kiedy powyższy kod jest budowany i wykonywany, daje następujący wynik -
value of a: 10
value of b: 30
value of a: 30
value of b: 10
value of f 23.333333333333
Lvalues i Rvalues w Lua
W Lua są dwa rodzaje wyrażeń -
lvalue- Wyrażenia odnoszące się do miejsca w pamięci nazywane są wyrażeniem „l-wartość”. Wartość l może pojawić się po lewej lub prawej stronie przypisania.
rvalue- Termin rvalue odnosi się do wartości danych przechowywanych pod jakimś adresem w pamięci. Wartość r to wyrażenie, któremu nie można przypisać wartości, co oznacza, że wartość r może pojawić się po prawej stronie, ale nie po lewej stronie przypisania.
Zmienne to l-wartości, więc mogą pojawiać się po lewej stronie przydziału. Literały numeryczne są wartościami r, więc nie można ich przypisywać i nie mogą pojawiać się po lewej stronie. Poniżej znajduje się prawidłowe oświadczenie -
g = 20
Ale poniższe nie jest prawidłową instrukcją i spowodowałoby błąd w czasie kompilacji -
10 = 20
W języku programowania Lua, oprócz powyższych typów przypisań, możliwe jest posiadanie wielu l-wartości i r-wartości w jednej instrukcji. Jest to pokazane poniżej.
g,l = 20,30
W powyższym zestawieniu 20 przypisuje się g, a 30 przypisuje się l.