Latest web development tutorials

I tipi di dati Lua

Lua è un linguaggio dinamicamente tipizzati, le variabili, le definizioni di tipo non hanno bisogno solo assegnano valori alle variabili. I valori possono essere memorizzati in variabili, passate come un parametro o restituiscono i risultati.

Lua ha otto tipi di base sono: zero, booleano, numero, una stringa, userdata, la funzione, filo e tavolo.

Tipi di dati descrizione
zero Il più semplice, solo il valore nil appartengono a questa classe rappresenta un valore non valido (equivalente a falso nelle espressioni condizionali).
booleano Esso contiene due valori: false e vere.
numero Esso rappresenta il tipo di doppia precisione in virgola mobile reale
stringa String da una coppia di virgolette doppie o singole di rappresentare
funzione O dalla funzione C scritto in Lua
userdata C rappresenta qualsiasi struttura di dati memorizzati in una variabile
filo Che l'attuazione di una linea separata per l'attuazione dei programmi di cooperazione
tavolo Lua tabelle (tabella) è in realtà un "array associativo" (array associativi), l'indice della matrice può essere un numero o una stringa. In Lua, la tabella viene creata dalla "espressione costrutto" per completare la semplice costrutto di espressione {} viene utilizzato per creare una tabella vuota.

Siamo in grado di utilizzare la funzione di tipo per verificare il tipo di una data variabile o un valore:

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

nil non ha alcun tipo indica un valore valido, è solo un valore - nullo, ad esempio la stampa un'assegnazione variabile non, il risultato sarà un valore nullo:

> print(type(a))
nil
>

Per le variabili globali e tavolo, pari a zero e un azione "delete", alla variabile di tabella o la tabella variabile globale assegnato un valore nullo, equivale a eliminarli, eseguire il seguente codice di sapere:

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

booleano (Boolean)

tipo booleano ha solo due possibili valori: true (vero) e false (falso), Lua false e nil come "false", l'altro "vero":

print(type(true))
print(type(false))
print(type(nil))
 
if false or nil then
    print("至少有一个是 true")
else
    print("false 和 nil 都为 false!")
end

Il codice di cui sopra viene eseguita come segue:

$ lua test.lua 
boolean
boolean
nil
false 和 nil 都为 false!

numero (Digital)

Lua default è solo un tipo di numero - doppia (doppia precisione) Tipo (il tipo predefinito può essere modificato in definizione luaconf.h), la seguente dicitura è visto come tipo di numero:

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

esempio »Esecuzione

Risultati del codice di cui sopra:

number
number
number
number
number
number

stringa (stringa)

String da una coppia di virgolette doppie o singole di rappresentare.

string1 = "this is string1"
string2 = 'this is string2'

È inoltre possibile utilizzare due staffe "[[]]" per significare "una" stringa.

html = [[
<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>
]]
print(html)

I seguenti risultati di esecuzione di codice:

<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>

Quando una stringa numerica per eseguire operazioni aritmetiche, Lua cercherà di trasformare quel numero in una stringa di numeri:

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

Il codice precedente "errore" + 1 errore di esecuzione, la concatenazione stringa usando .., come ad esempio:

> print("a" .. 'b')
ab
> print(157 .. 428)
157428
> 

Utilizzare # per calcolare la lunghezza della stringa, la stringa sul davanti, esempi seguenti:

> len = "www.w3cschool.cc"
> print(#len)
16
> print(#"www.w3cschool.cc")
16
> 

tabella (Tabella)

In Lua, la tabella viene creata dalla "espressione costrutto" per completare la semplice costrutto di espressione {} viene utilizzato per creare una tabella vuota. È inoltre possibile aggiungere alcuni dati nella tabella, tabella di inizializzazione diretta:

-- 创建一个空的 table
local tbl1 = {}
 
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}

Lua tabelle (tabella) è in realtà un "array associativo" (array associativi), l'indice della matrice può essere un numero o una stringa.

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

Script risultati di esecuzione:

$ lua table_test.lua 
key : value
10 : 33

A differenza di altri linguaggi della matrice come una matrice di indice iniziale di 0, l'indice iniziale di default nella tabella in Lua generale 1.

-- table_test2.lua 脚本文件
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
    print("Key", key)
end

Script risultati di esecuzione:

$ lua table_test2.lua 
Key	1
Key	2
Key	3
Key	4

dimensione della tabella non è fisso lunghezza, vi è un aumento automatico della lunghezza della tabella per aggiungere nuovi dati, la tabella originale non è nullo.

-- table_test3.lua 脚本文件
a3 = {}
for i = 1, 10 do
    a3[i] = i
end
a3["key"] = "val"
print(a3["key"])
print(a3["none"])

Script risultati di esecuzione:

$ lua table_test3.lua 
val
nil

(funzione)

In Lua, la funzione viene considerato "valori di prima classe (First-Class Value)", ci può essere la funzione variabile:

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

Script risultati di esecuzione:

$ lua function_test.lua 
120
120

funzione può essere funzione anonima (funzione anonima) a seguito di passaggio di parametri:

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

Script risultati di esecuzione:

$ lua function_test2.lua 
key1 = val1
key2 = val2

filo (filo)

In Lua, il thread principale è un programma di collaborazione (coroutine). E 'con filo (filo) quasi ha il proprio stack indipendenti, variabili locali e puntatore all'istruzione, è possibile condividere le variabili globali e la maggior parte delle altre cose con gli altri programmi di collaborazione.

Discussione differenza con coroutine: più thread possono funzionare simultaneamente e coroutine possono eseguire una sola, in qualsiasi momento, e coroutine esecuzione solo appendere (sospendere) solo in pausa.


userdata (tipo personalizzato)

userdata è un tipo di dati definito dall'utente utilizzato dall'applicazione indica una libreria lingua o C / C ++ creato può essere qualsiasi / C ++ dati C di qualsiasi tipo di dati (di solito una struct e puntatori) memorizzati in Lua variabile chiamata.