Stringhe

Corde hanno il significato usuale: una sequenza di caratteri. Lua è otto bit pulita e così stringhe possono contenere caratteri con qualsiasi valore numerico, compresi gli zeri embedded. Ciò significa che è possibile memorizzare tutti i dati binari in una stringa. Le stringhe in Lua sono valori immutabili. Non è possibile modificare un carattere all'interno di una stringa, come si può in C; invece, si crea una nuova stringa con le modifiche desiderate, come nell'esempio seguente:

a = "una stringa"
b = string.gsub (a, "uno", "altro") - sostituzione di parti di stringa
stampa (a) -> una stringa
stampa (b) -> un'altra stringa

Le stringhe in Lua sono soggette a gestione automatica della memoria, come tutti gli oggetti Lua. Ciò significa che non devi preoccuparti di allocazione e deallocazione di stringhe; Lua gestisce questo per voi. Una stringa può contenere una sola lettera o un libro intero. Lua gestisce le stringhe lunghe abbastanza efficiente. I programmi che manipolano le stringhe con 100K o 1M caratteri non sono insoliti in Lua.Siamo in grado di delimitare le stringhe letterali abbinando virgolette singole o doppie:

a = "una linea"
b = 'un'altra linea'

Come una questione di stile, è consigliabile utilizzare sempre lo stesso tipo di virgolette (singole o doppie) in un programma, a meno che la stringa stessa ha citazioni; quindi si utilizza l'altra citazione, o fuggire quelle citazioni con backslash. Le stringhe in Lua possono contenere i seguenti sequenze di escape C-like:

\ a campana
\ b spazio posteriore
\ f form feed
\ n nuova linea
\ r ritorno a capo
\ t tabulazione orizzontale
\ v tabulazione verticale
\\ backslash
\ " virgolette
\ ' apostrofo
\ [ parentesi quadra sinistra
\] Parentesi quadra destra

Illustriamo loro uso nei seguenti esempi:

> Print ("una riga riga \ Nnext \ n \" tra virgolette \ ", 'tra virgolette'")
una linea
riga successiva
"tra virgolette", "tra virgolette '
> Print ('un backslash all'interno di citazioni: \' \\\ '')
un backslash all'interno di citazioni: '\'
> Print ("un modo più semplice: '\\'")
un modo più semplice: '\'

Siamo in grado di specificare un carattere in una stringa anche con il suo valore numerico attraverso la sequenza di escape \ ddd, dove ddd è una sequenza di un massimo di tre decimali cifre. Come un esempio un po 'complesso, le due letterali "alo \ n123 \" "e' \ 97lo \ 10 \ 04923" 'avere lo stesso valore, in un sistema che utilizza ASCII: 97 è il codice ASCII per un, 10 è il codice per newline, e 49 (\ 049 nell'esempio) è il codice per la cifra 1.Siamo in grado di delimitare le stringhe letterali anche abbinando tra doppie parentesi quadre [[]]. Letterali in questa forma bracketing possono funzionare per più linee, possono nido, e non interpretare sequenze di escape. Inoltre, questo modulo ignora il primo carattere della stringa quando questo personaggio è un ritorno a capo. Questa forma è particolarmente conveniente per le stringhe di scrittura che contengono pezzi del programma; per esempio, page = [[
<HTML>
<HEAD>
<TITLE> di una pagina HTML </ TITLE>
</ HEAD>
<BODY>
<A HREF="http://www.lua.org"> Lua </A>
[[un testo tra doppie parentesi quadre]]
</ BODY>
</ HTML>
]]

scrittura (pagina)

Lua offre conversione automatica tra numeri e stringhe in fase di esecuzione. Qualsiasi operazione numerica applicata a una stringa di prova a convertire la stringa in un numero:[/FONT] stampa ("10" + 1) -> 11
stampa ("10 + 1") -> 10 + 1
print ("- 5.3e-10" * "2") -> -1.06e-09
stampa ("ciao" + 1) - ERRORE (non può convertire il "ciao")
Lua applica tali coercizioni non solo gli operatori aritmetici, ma anche in altri posti che prevedono un numero. Al contrario, ogni volta che trova un numero dove si aspetta una stringa, Lua converte il numero in una stringa:[/FONT] stampa (10 .. 20) -> 1020
(Il.. è l'operatore di concatenazione di stringhe in Lua Quando si scrive subito dopo un numero, è necessario separarli con uno spazio,.. Altrimenti, Lua pensa che il primo punto è un punto decimale)Nonostante queste conversioni automatiche, stringhe e numeri sono cose diverse. Un confronto come 10 == "10" è sempre falso, perché 10 è un numero e"10" è una stringa. Se avete bisogno di convertire una stringa in un numero in modo esplicito, è possibile utilizzare la funzione di ToNumber, che restituisce nil se la stringa non denota un numero corretto:

line = io.read () - letto una riga
n = ToNumber (linea) - cercare di convertirlo in un numero
se n == nil poi
errore (linea .. "non è un numero valido")
altro
stampa (n * 2)
fine

Per convertire un numero in una stringa, è possibile chiamare la funzione tostring o concatenare il numero con la stringa vuota:

stampa (tostring (10) == "10") -> true
stampa (10 .. "" == "10") -> true
Tali conversioni sono sempre validi.