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 it " - " it v) end tab1.key1 = nil for k, v in pairs(tab1) do print(k it " - " it 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))
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="/">w3cschool本教程</a> </body> </html> ]] print(html)
I seguenti risultati di esecuzione di codice:
<html> <head></head> <body> <a href="/">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 it, come ad esempio:
> print("a" it 'b') ab > print(157 it 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 it " : " it 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 it " = " it 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.