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),

Typy danych Lua

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

zero (pusty)

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

Wartość logiczna (Boolean)

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!

numer (Digital)

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))

Uruchomienie instancji »

Wyniki powyższego kodu:

number
number
number
number
number
number

string (łańcuch)

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
> 

tabela (tabela)

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

Funkcja (Function)

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

gwintu (gwint)

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 (typ niestandardowy)

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.

Typy danych Lua
10/30