0% found this document useful (0 votes)
59 views

Programming in Lua - 2.4

Lua guide. Full credit to: www.lua.org

Uploaded by

Qin Krein
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
59 views

Programming in Lua - 2.4

Lua guide. Full credit to: www.lua.org

Uploaded by

Qin Krein
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

This first edition was written for Lua 5.0.

While still largely relevant for later versions, there are


some differences.
The fourth edition
targets Lua 5.3 and is available at Amazon and other bookstores.
By buying the book, you also help to support the Lua project.

Programming in Lua
Part I. The Language
Chapter 2. Types and Values

2.4 – Strings
Strings have the usual meaning:
a sequence of characters.
Lua is eight-bit
clean
and so strings may contain characters with any numeric value,
including embedded zeros.
That means that you can store any binary data
into a string.
Strings in Lua are immutable values.
You cannot change a
character inside a string,
as you may in C;
instead, you create a new string
with the desired modifications,
as in the next example:

a = "one string"

b = string.gsub(a, "one", "another") -- change string parts

print(a) --> one string

print(b) --> another string

Strings in Lua are subject to automatic memory management,


like all Lua
objects.
That means that you do not have to worry about allocation and
deallocation of strings; Lua handles this for you.
A string may contain a single
letter or an entire book.
Lua handles long strings quite efficiently.
Programs
that manipulate strings with 100K or 1M characters
are not unusual in Lua.

We can delimit literal strings by


matching single or double quotes:

a = "a line"

b = 'another line'

As a matter of style,
you should use always the same kind of quotes
(single or
double) in a program,
unless the string itself has quotes;
then you use the
other quote,
or escape those quotes with backslashes.
Strings in Lua can
contain the following C-like escape sequences:
\a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\" double quote
\' single quote
\[ left square bracket
\] right square bracket

We illustrate their use in the following examples:

> print("one line\nnext line\n\"in quotes\", 'in quotes'")

one line

next line

"in quotes", 'in quotes'

> print('a backslash inside quotes: \'\\\'')

a backslash inside quotes: '\'

> print("a simpler way: '\\'")

a simpler way: '\'

We can specify a character in a string also by its numeric value


through the
escape sequence \ddd,
where ddd is a sequence of up to three decimal digits.
As a somewhat complex example,
the two literals "alo\n123\"" and
'\97lo\10\04923"' have the same value,
in a system using ASCII:
97 is the
ASCII code for a,
10 is the code for newline,
and 49 (\049 in the example) is the
code for the digit 1.

We can delimit literal strings also by matching double


square brackets
[[...]].
Literals in this bracketed form may run for several lines,
may nest,
and do not interpret escape sequences.
Moreover, this form ignores the first
character of the string
when this character is a newline.
This form is
especially convenient for
writing strings that contain program pieces;
for
instance,

page = [[

<HTML>

<HEAD>

<TITLE>An HTML Page</TITLE>

</HEAD>

<BODY>

<A HREF="http://www.lua.org">Lua</A>

[[a text between double brackets]]

</BODY>

</HTML>

]]

write(page)

Lua provides automatic conversions between numbers and strings at run


time.
Any numeric operation applied to a string tries to convert
the string to a
number:
print("10" + 1) --> 11

print("10 + 1") --> 10 + 1

print("-5.3e-10"*"2") --> -1.06e-09

print("hello" + 1) -- ERROR (cannot convert "hello")

Lua applies such coercions not only in arithmetic operators,


but also in other
places that expect a number.
Conversely, whenever it finds a number where it
expects a string,
Lua converts the number to a string:

print(10 .. 20) --> 1020

(The .. is the string concatenation operator in Lua.


When you write it right
after a numeral,
you must separate them with a space;
otherwise, Lua thinks
that the first dot is a decimal point.)

Despite those automatic conversions,


strings and numbers are different
things.
A comparison like 10 == "10" is always false,
because 10 is a number
and "10" is a string.
If you need to convert a string to a number explicitly,
you
can use the function tonumber,
which returns nil if the string does not denote
a proper number:

line = io.read() -- read a line

n = tonumber(line) -- try to convert it to a number

if n == nil then

error(line .. " is not a valid number")

else

print(n*2)

end

To convert a number to a string,


you can call the function tostring
or
concatenate the number with the empty string:

print(tostring(10) == "10") --> true

print(10 .. "" == "10") --> true

Such conversions are always valid.

Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved.

You might also like