Latest web development tutorials

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 .. " - " .. v)
end
 
tab1.key1 = nil
for k, v in pairs(tab1) do
    print(k .. " - " .. 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="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>
]]
print(html)

Poniższe wyniki wykonanie kodu:

<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">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 .., takich jak:

> print("a" .. 'b')
ab
> print(157 .. 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 .. " : " .. 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 .. " = " .. 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.