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 |
Lua is a dynamically typed language. There are no type definitions in the language; each value carries its own type.
There are eight basic types in Lua:
nil, boolean, number, string, userdata,
function, thread, and table.
The type function gives
the type name of a given value:
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
The last example will result in "string" no matter the value of X,
because the result of type is always a string.
Variables have no predefined types; any variable may contain values of any type:
print(type(a)) --> nil (`a' is not initialized)
a = 10
print(type(a)) --> number
a = "a string!!"
print(type(a)) --> string
a = print -- yes, this is valid!
a(type(a)) --> function
Notice the last two lines:
Functions are first-class values in Lua;
so, we can manipulate them like any other value.
(More about that in Chapter 6.)
Usually, when you use a single variable for different types, the result is messy code. However, sometimes the judicious use of this facility is helpful, for instance in the use of nil to differentiate a normal return value from an exceptional condition.
| Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |