Najlepszy samouczek Typy danych Lua W 2024 r. W tym samouczku możesz dowiedzieć się zero (pusty),Wartość logiczna (Boolean),numer (Digital),string (łańcuch),tabela (tabela),Funkcja (Function),gwintu (gwint),userdata (typ niestandardowy),
Lua jest dynamicznie wpisywanych języków, zmienne, definicje typu nie wystarczy przypisać wartości do zmiennych. Wartości te mogą być przechowywane w zmiennych, jako parametr, lub zwrócić wyniki.
Lua posiada osiem podstawowe typy: nil, Boolean, Number, string, userdata, funkcja, nici i tabeli.
Typy danych | opis |
---|---|
zero | Najbardziej proste, tylko wartość nil należą do tej klasy reprezentuje nieprawidłową wartość false (odpowiednik w wyrażeniach warunkowych). |
logiczna | Zawiera on dwie wartości: fałszywe i prawdziwe. |
liczba | Reprezentuje typ podwójnej precyzji zmiennoprzecinkowej rzeczywistym |
sznur | String przez parę podwójnych lub pojedynczych cudzysłowach do reprezentowania |
funkcja | Albo przez funkcję C napisane w Lua |
userdata | C oznacza dowolną strukturę danych przechowywaną w zmiennej |
wątek | Że wdrożenie osobnej linii na realizację programów współpracy |
stół | Lua tabele (tabela) jest w rzeczywistości "asocjacyjna" (Tablice asocjacyjne), indeks tablicy może być liczbą lub ciągiem znaków. W Lua, tabela jest tworzona przez "konstruktu ekspresyjnego", aby zakończyć najprostszy konstrukt ekspresyjny {} służy do utworzenia pustego stołu. |
Możemy skorzystać z funkcji typu przetestować typ danej zmiennej lub wartość:
print(type("Hello world")) --> string print(type(10.4*3)) --> number print(type(print)) --> function print(type(type)) --> function print(type(true)) --> boolean print(type(nil)) --> nil print(type(type(X))) --> string
nil nie każdy rodzaj wskazuje prawidłową wartość, to jest tylko jedna wartość - zerowe, takich jak drukowanie przypisaniem zmiennej nie, to wyświetli wartość nil:
> print(type(a)) nil >
Dla zmiennych globalnych i stół, zero i "Usuń" działania, do zmiennej globalnej tabeli lub tabeli zmiennej przypisana wartość zerowa, równoważne, aby je usunąć, należy wykonać następujący kod wiedzieć:
tab1 = { key1 = "val1", key2 = "val2", "val3" } for k, v in pairs(tab1) do print(k pl " - " pl v) end tab1.key1 = nil for k, v in pairs(tab1) do print(k pl " - " pl v) end
logiczna typu ma tylko dwie możliwe wartości: true (prawda) i false (fałsz), Lua to fałszywe i zera na "false", a druga "prawda":
print(type(true)) print(type(false)) print(type(nil)) if false or nil then print("至少有一个是 true") else print("false 和 nil 都为 false!") end
Powyższy kod jest wykonywany w następujący sposób:
$ lua test.lua boolean boolean nil false 和 nil 都为 false!
Domyślnym Lua jest jedynym rodzajem jeden numer - double (podwójna precyzja) typ (rodzaj domyślny można zmodyfikować w definicji luaconf.h), następujące brzmienie jest postrzegany jako typ numeru:
print(type(2)) print(type(2.2)) print(type(0.2)) print(type(2e+1)) print(type(0.2e-1)) print(type(7.8263692594256e-06))
Wyniki powyższego kodu:
number number number number number number
String przez parę podwójnych lub pojedynczych cudzysłowach reprezentować.
string1 = "this is string1" string2 = 'this is string2'
Można również korzystać z dwóch nawiasów "[[]]" oznacza "jeden" string.
html = [[ <html> <head></head> <body> <a href="/">w3cschool本教程</a> </body> </html> ]] print(html)
Poniższe wyniki wykonanie kodu:
<html> <head></head> <body> <a href="/">w3cschool本教程</a> </body> </html>
Gdy ciąg liczbowy do wykonywania operacji arytmetycznych, Lua spróbuje włączyć tę liczbę na ciąg liczb:
> print("2" + 6) 8.0 > print("2" + "6") 8.0 > print("2 + 6") 2 + 6 > print("-2e2" * "6") -1200.0 > print("error" + 1) stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: in ? >
Powyższy kod "błąd" Błąd wykonania + 1, konkatenacją ciąg przy użyciu pl, takich jak:
> print("a" pl 'b') ab > print(157 pl 428) 157428 >
Użyj # obliczyć długość łańcucha, łańcuch z przodu, następujące przykłady:
> len = "www.w3cschool.cc" > print(#len) 16 > print(#"www.w3cschool.cc") 16 >
W Lua, tabela jest tworzona przez "konstruktu ekspresyjnego", aby zakończyć najprostszy konstrukt ekspresyjny {} służy do utworzenia pustego stołu. Można również dodać jakieś dane w tabeli, bezpośrednia tabeli inicjalizacji:
-- 创建一个空的 table local tbl1 = {} -- 直接初始表 local tbl2 = {"apple", "pear", "orange", "grape"}
Lua tabele (tabela) jest w rzeczywistości "asocjacyjna" (Tablice asocjacyjne), indeks tablicy może być liczbą lub ciągiem znaków.
-- table_test.lua 脚本文件 a = {} a["key"] = "value" key = 10 a[key] = 22 a[key] = a[key] + 11 for k, v in pairs(a) do print(k pl " : " pl v) end
Wyniki wykonania skryptu:
$ lua table_test.lua key : value 10 : 33
W przeciwieństwie do innych języków tablicy jako tablicy początkowym indeksie 0, domyślnie początkowej indeksu w tabeli w Lua ogólnie 1.
-- table_test2.lua 脚本文件 local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Key", key) end
Wyniki wykonania skryptu:
$ lua table_test2.lua Key 1 Key 2 Key 3 Key 4
Wielkość tabeli nie jest stała długość, istnieje automatyczny wzrost długości stołu, aby dodać nowe dane, oryginalna tabela nie jest zerowa.
-- table_test3.lua 脚本文件 a3 = {} for i = 1, 10 do a3[i] = i end a3["key"] = "val" print(a3["key"]) print(a3["none"])
Wyniki wykonania skryptu:
$ lua table_test3.lua val nil
W Lua, funkcja ta jest uważana za "Wartości Pierwsza klasa (First-Class Value)", nie może być zmienna funkcja:
-- function_test.lua 脚本文件 function factorial1(n) if n == 0 then return 1 else return n * factorial1(n - 1) end end print(factorial1(5)) factorial2 = factorial1 print(factorial2(5))
Wyniki wykonania skryptu:
$ lua function_test.lua 120 120
Funkcja ta może być anonimową funkcję (funkcja anonimowa) w drodze parametru Podania:
-- function_test2.lua 脚本文件 function anonymous(tab, fun) for k, v in pairs(tab) do print(fun(k, v)) end end tab = { key1 = "val1", key2 = "val2" } anonymous(tab, function(key, val) return key pl " = " pl val end)
Wyniki wykonania skryptu:
$ lua function_test2.lua key1 = val1 key2 = val2
W Lua, główny wątek jest wspólnym programem (współprogram). Jest z gwintem (gwint) niemal posiada własną niezależną stos, zmienne lokalne i wskaźnik instrukcji, można udostępnić zmienne globalne i większość innych rzeczy z innych programów współpracy.
Różnica Temat z współprogram: wiele wątków może działać jednocześnie, a współprogram może działać tylko jeden w każdej chwili, i działa współprogram tylko powiesić (zawieszenie) Tylko w trybie wstrzymania.
userdata to typ danych zdefiniowany przez użytkownika wykorzystywane przez aplikację wskazuje lub C / C ++ biblioteki języka stworzonego może być żadnych C / C ++ dane dowolnego typu danych (zazwyczaj struktura i wskaźniki) przechowywanych w Lua wywołanie zmiennej.