mirror of
https://github.com/lua/lua.git
synced 2025-01-28 06:03:00 +08:00
corrections/suggestions by Ed Ferguson
This commit is contained in:
parent
c499442e5f
commit
60a8b94fd0
286
manual.tex
286
manual.tex
@ -1,4 +1,4 @@
|
||||
% $Id: manual.tex,v 1.63 2002/11/18 14:39:34 roberto Exp roberto $
|
||||
% $Id: manual.tex,v 1.64 2002/12/11 13:43:15 roberto Exp roberto $
|
||||
%{[(
|
||||
|
||||
\documentclass[11pt,twoside]{article}
|
||||
@ -134,7 +134,7 @@ Waldemar Celes
|
||||
\tecgraf\ --- Computer Science Department --- PUC-Rio
|
||||
}
|
||||
|
||||
%\date{{\small \tt\$Date: 2002/11/18 14:39:34 $ $}}
|
||||
%\date{{\small \tt\$Date: 2002/12/11 13:43:15 $ $}}
|
||||
|
||||
\maketitle
|
||||
|
||||
@ -273,7 +273,7 @@ This environment is initialized with a call from the embedding program to
|
||||
persists until a call to \verb|lua_close|
|
||||
or the end of the embedding program.
|
||||
The host program can create multiple independent global
|
||||
environments, and freely switch between them \see{mangstate}.
|
||||
environments, and freely switch among them \see{mangstate}.
|
||||
|
||||
The unit of execution of Lua is called a \Def{chunk}.
|
||||
A chunk is simply a sequence of statements.
|
||||
@ -284,7 +284,7 @@ When a chunk is executed, first it is pre-compiled into opcodes for
|
||||
a virtual machine,
|
||||
and then the compiled statements are executed
|
||||
by an interpreter for the virtual machine.
|
||||
All modifications a chunk makes to the global environment persist
|
||||
All modifications that a chunk makes to the global environment persist
|
||||
after the chunk ends.
|
||||
|
||||
Chunks may also be pre-compiled into binary form and stored in files;
|
||||
@ -316,10 +316,13 @@ usually it represents the absence of a useful value.
|
||||
In Lua, both \nil{} and \False{} make a condition false,
|
||||
and any other value makes it true.
|
||||
\emph{Number} represents real (double-precision floating-point) numbers.
|
||||
(It is not difficult to build Lua interpreters that use other
|
||||
internal representations for numbers,
|
||||
such as single-precision float or long integers.)
|
||||
\emph{String} represents arrays of characters.
|
||||
\index{eight-bit clean}
|
||||
Lua is 8-bit clean,
|
||||
and so strings may contain any 8-bit character,
|
||||
so strings may contain any 8-bit character,
|
||||
including embedded zeros (\verb|'\0'|) \see{lexical}.
|
||||
|
||||
Functions are \emph{first-class values} in Lua.
|
||||
@ -351,9 +354,9 @@ that is, \Index{arrays} that can be indexed not only with numbers,
|
||||
but with any value (except \nil).
|
||||
Moreover,
|
||||
tables can be \emph{heterogeneous},
|
||||
that is, they can contain values of all types.
|
||||
that is, they can contain values of all types (except \nil).
|
||||
Tables are the sole data structuring mechanism in Lua;
|
||||
they may be used not only to represent ordinary arrays,
|
||||
they may be used to represent not only ordinary arrays,
|
||||
but also symbol tables, sets, records, graphs, trees, etc.
|
||||
To represent \Index{records}, Lua uses the field name as an index.
|
||||
The language supports this representation by
|
||||
@ -365,7 +368,7 @@ Like indices, the value of a table field can be of any type.
|
||||
In particular,
|
||||
because functions are first class values,
|
||||
table fields may contain functions.
|
||||
So, tables may also carry \emph{methods} \see{func-def}.
|
||||
Thus tables may also carry \emph{methods} \see{func-def}.
|
||||
|
||||
Tables, functions, and userdata values are \emph{objects}:
|
||||
variables do not actually \emph{contain} these values,
|
||||
@ -413,7 +416,7 @@ Lua provides automatic conversion between
|
||||
string and number values at run time.
|
||||
Any arithmetic operation applied to a string tries to convert
|
||||
that string to a number, following the usual rules.
|
||||
Conversely, whenever a number is used when a string is expected,
|
||||
Conversely, whenever a number is used where a string is expected,
|
||||
the number is converted to a string, in a reasonable format.
|
||||
The format is chosen so that
|
||||
a conversion from number to string then back to number
|
||||
@ -429,7 +432,7 @@ global variables
|
||||
and local variables.
|
||||
Variables are assumed to be global unless explicitly declared local
|
||||
\see{localvar}.
|
||||
Before the first assignment, the value of a variable is \nil.
|
||||
Before the first assignment to a variable, its value is \nil.
|
||||
|
||||
All global variables live as fields in ordinary Lua tables.
|
||||
Usually, globals live in a table called \Index{table of globals}.
|
||||
@ -473,8 +476,8 @@ and the other is a threshold.
|
||||
When the number of bytes crosses the threshold,
|
||||
Lua runs the garbage collector,
|
||||
which reclaims the memory of all dead objects.
|
||||
The byte counter is corrected,
|
||||
and then the threshold is reset to twice the value of the byte counter.
|
||||
The byte counter is adjusted,
|
||||
and then the threshold is reset to twice the new value of the byte counter.
|
||||
|
||||
Through the C~API, you can query those numbers,
|
||||
and change the threshold \see{GC-API}.
|
||||
@ -502,9 +505,9 @@ A table with both weak keys and weak values allows the collection of
|
||||
both keys and values.
|
||||
In any case, if either the key or the value is collected,
|
||||
the whole pair is removed from the table.
|
||||
The weakness of a table is controled by the value of the
|
||||
The weakness of a table is controlled by the value of the
|
||||
\verb|__mode| field of its metatable.
|
||||
If the \verb|__mode| field is a string containing the \verb|k| character,
|
||||
If the \verb|__mode| field is a string containing the character \verb|k|,
|
||||
the keys in the table are weak.
|
||||
If \verb|__mode| contains \verb|v|,
|
||||
the values in the table are weak.
|
||||
@ -546,7 +549,7 @@ Lua is a case-sensitive language:
|
||||
(if the locale permits) are two different, valid identifiers.
|
||||
As a convention, identifiers starting with an underscore followed by
|
||||
uppercase letters (such as \verb|_VERSION|)
|
||||
are reserved for internal variables.
|
||||
are reserved for internal variables used by Lua.
|
||||
|
||||
The following strings denote other \Index{tokens}:
|
||||
\begin{verbatim}
|
||||
@ -571,8 +574,8 @@ and can contain the C-like escape sequences
|
||||
`\verb|\'|' (single quote),
|
||||
and `\verb|\|\emph{newline}' (that is, a backslash followed by a real newline,
|
||||
which results in a newline in the string).
|
||||
A character in a string may also be specified by its numerical value,
|
||||
through the escape sequence `\verb|\|\emph{ddd}',
|
||||
A character in a string may also be specified by its numerical value
|
||||
using the escape sequence `\verb|\|\emph{ddd}',
|
||||
where \emph{ddd} is a sequence of up to three \emph{decimal} digits.
|
||||
Strings in Lua may contain any 8-bit value, including embedded zeros,
|
||||
which can be specified as `\verb|\0|'.
|
||||
@ -648,7 +651,7 @@ The syntax \verb|var.NAME| is just syntactic sugar for
|
||||
\end{Produc}%
|
||||
|
||||
The expression denoting the table to be indexed has a restricted syntax;
|
||||
\See{expressions} for details.
|
||||
see \See{expressions} for details.
|
||||
|
||||
The meaning of assignments and evaluations of global and
|
||||
indexed variables can be changed via metatables.
|
||||
@ -656,17 +659,17 @@ An assignment to a global variable \verb|x = val|
|
||||
is equivalent to the assignment
|
||||
\verb|_glob.x = val|,
|
||||
where \verb|_glob| is the table of globals of the running function
|
||||
(\see{global-table} for a discussion about the table of globals).
|
||||
(see \See{global-table} for a discussion about the table of globals).
|
||||
An assignment to an indexed variable \verb|t[i] = val| is equivalent to
|
||||
\verb|settable_event(t,i,val)|.
|
||||
An access to a global variable \verb|x|
|
||||
is equivalent to \verb|_glob.x|
|
||||
(again, \see{global-table} for a discussion about \verb|_glob|).
|
||||
(again, see \See{global-table} for a discussion about \verb|_glob|).
|
||||
An access to an indexed variable \verb|t[i]| is equivalent to
|
||||
a call \verb|gettable_event(t,i)|.
|
||||
See \See{metatable} for a complete description of the
|
||||
\verb|settable_event| and \verb|gettable_event| functions.
|
||||
(These functions are not defined in Lua.
|
||||
(These functions are not defined or callable in Lua.
|
||||
We use them here only for explanatory purposes.)
|
||||
|
||||
|
||||
@ -724,16 +727,16 @@ the list of values is \emph{adjusted} to the length of
|
||||
the list of variables.\index{adjustment}
|
||||
If there are more values than needed,
|
||||
the excess values are thrown away.
|
||||
If there are less values than needed,
|
||||
If there are fewer values than needed,
|
||||
the list is extended with as many \nil's as needed.
|
||||
If the list of expressions ends with a function call,
|
||||
then all values returned by that function call enter in the list of values,
|
||||
before the adjust
|
||||
before the adjustment
|
||||
(except when the call is enclosed in parentheses; see \See{expressions}).
|
||||
|
||||
The assignment statement first evaluates all its expressions,
|
||||
and only then makes the assignments.
|
||||
So, the code
|
||||
and only then are the assignments performed.
|
||||
Thus the code
|
||||
\begin{verbatim}
|
||||
i = 3
|
||||
i, a[i] = i+1, 20
|
||||
@ -765,23 +768,23 @@ Lua also has a \rwd{for} statement, in two flavors \see{for}.
|
||||
|
||||
The \Index{condition expression} \M{exp} of a
|
||||
control structure may return any value.
|
||||
Both \False{} and \nil{} are considered false.
|
||||
All values different from \nil{} and \False{} are considered true
|
||||
(in particular, the number 0 and the empty string are also true);
|
||||
both \False{} and \nil{} are considered false.
|
||||
(in particular, the number 0 and the empty string are also true).
|
||||
|
||||
The \rwd{return} statement is used to return values
|
||||
from a function or from a chunk.\IndexKW{return}
|
||||
\label{return}%
|
||||
\index{return statement}%
|
||||
Functions and chunks may return more than one value,
|
||||
and so the syntax for the \rwd{return} statement is
|
||||
so the syntax for the \rwd{return} statement is
|
||||
\begin{Produc}
|
||||
\produc{stat}{\rwd{return} \opt{explist1}}
|
||||
\end{Produc}%
|
||||
|
||||
The \rwd{break} statement can be used to terminate the execution of a
|
||||
\rwd{while}, \rwd{repeat}, or \rwd{for} loop,
|
||||
skipping to the next statement after the loop:\IndexKW{break}
|
||||
and to skip to the next statement after the loop:\IndexKW{break}
|
||||
\index{break statement}
|
||||
\begin{Produc}
|
||||
\produc{stat}{\rwd{break}}
|
||||
@ -807,10 +810,10 @@ beginning of a chunk for syntax checking only.)
|
||||
\subsubsection{For Statement} \label{for}\index{for statement}
|
||||
|
||||
The \rwd{for} statement has two forms,
|
||||
one for numbers and one generic.
|
||||
one numeric and one generic.
|
||||
\IndexKW{for}\IndexKW{in}
|
||||
|
||||
The numerical \rwd{for} loop repeats a block of code while a
|
||||
The numeric \rwd{for} loop repeats a block of code while a
|
||||
control variable runs through an arithmetic progression.
|
||||
It has the following syntax:
|
||||
\begin{Produc}
|
||||
@ -818,7 +821,7 @@ It has the following syntax:
|
||||
\rwd{do} block \rwd{end}}
|
||||
\end{Produc}%
|
||||
The \emph{block} is repeated for \emph{name} starting at the value of
|
||||
the first \emph{exp}, until it reaches the second \emph{exp} by steps of the
|
||||
the first \emph{exp}, until it passes the second \emph{exp} by steps of the
|
||||
third \emph{exp}.
|
||||
More precisely, a \rwd{for} statement like
|
||||
\begin{verbatim}
|
||||
@ -868,7 +871,7 @@ is equivalent to the code:
|
||||
\begin{verbatim}
|
||||
do
|
||||
local _f, _s, var_1, ..., var_n = explist
|
||||
while 1 do
|
||||
while true do
|
||||
var_1, ..., var_n = _f(_s, var_1)
|
||||
if var_1 == nil then break end
|
||||
block
|
||||
@ -879,7 +882,7 @@ Note the following:
|
||||
\begin{itemize}\itemsep=0pt
|
||||
\item \verb|explist| is evaluated only once.
|
||||
Its results are a ``generator'' function,
|
||||
a ``state'', and an initial value for the ``iterator variable''.
|
||||
a ``state'', and an initial value for the first ``iterator variable''.
|
||||
\item \verb|_f| and \verb|_s| are invisible variables.
|
||||
The names are here for explanatory purposes only.
|
||||
\item The behavior is \emph{undefined} if you assign to any
|
||||
@ -913,7 +916,7 @@ of a multiple assignment \see{assignment}.
|
||||
Otherwise, all variables are initialized with \nil.
|
||||
|
||||
A chunk is also a block \see{chunks},
|
||||
and so local variables can be declared outside any explicit block.
|
||||
so local variables can be declared outside any explicit block.
|
||||
Such local variables die when the chunk ends.
|
||||
|
||||
Visibility rules for local variables are explained in \See{visibility}.
|
||||
@ -948,7 +951,7 @@ function calls are explained in \See{functioncall};
|
||||
table constructors are explained in \See{tableconstructor}.
|
||||
|
||||
Expressions can also be built with arithmetic operators, relational operators,
|
||||
and logical operadors, all of which are explained below.
|
||||
and logical operators, all of which are explained below.
|
||||
|
||||
\subsubsection{Arithmetic Operators}
|
||||
Lua supports the usual \Index{arithmetic operators}:
|
||||
@ -1019,7 +1022,7 @@ The conjunction operator \rwd{and} returns its first argument
|
||||
if its value is \False{} or \nil;
|
||||
otherwise, \rwd{and} returns its second argument.
|
||||
The disjunction operator \rwd{or} returns its first argument
|
||||
if it is different from \nil and \False;
|
||||
if it is different from \nil{} and \False;
|
||||
otherwise, \rwd{or} returns its second argument.
|
||||
Both \rwd{and} and \rwd{or} use \Index{short-cut evaluation},
|
||||
that is,
|
||||
@ -1249,7 +1252,7 @@ Different instances of the same function
|
||||
may refer to different non-local variables \see{visibility}
|
||||
and may have different tables of globals \see{global-table}.
|
||||
|
||||
Parameters act as local variables,
|
||||
Parameters act as local variables that are
|
||||
initialized with the argument values:
|
||||
\begin{Produc}
|
||||
\produc{parlist1}{namelist \opt{\ter{,} \ter{\ldots}}}
|
||||
@ -1267,7 +1270,7 @@ instead, it collects all extra arguments into an implicit parameter,
|
||||
called \IndexLIB{arg}.
|
||||
The value of \verb|arg| is a table,
|
||||
with a field~\verb|n| whose value is the number of extra arguments,
|
||||
and the extra arguments at positions 1,~2,~\ldots,~\verb|n|.
|
||||
and with the extra arguments at positions 1,~2,~\ldots,~\verb|n|.
|
||||
|
||||
As an example, consider the following definitions:
|
||||
\begin{verbatim}
|
||||
@ -1335,7 +1338,7 @@ Notice that, in a declaration like \verb|local x = x|,
|
||||
the new \verb|x| being declared is not in scope yet,
|
||||
so the second \verb|x| refers to the ``outside'' variable.
|
||||
|
||||
Because of those \Index{lexical scoping} rules,
|
||||
Because of these \Index{lexical scoping} rules,
|
||||
local variables can be freely accessed by functions
|
||||
defined inside their scope.
|
||||
For instance:
|
||||
@ -1358,8 +1361,9 @@ Consider the following example:
|
||||
a[i] = function () y=y+1; return x+y end
|
||||
end
|
||||
\end{verbatim}
|
||||
In that code,
|
||||
each function uses a different \verb|y| variable,
|
||||
The loop creates ten closures
|
||||
(that is, instances of the anonymous function).
|
||||
Each of these closures uses a different \verb|y| variable,
|
||||
while all of them share the same \verb|x|.
|
||||
|
||||
\subsection{Error Handling} \label{error}
|
||||
@ -1382,11 +1386,11 @@ you can use the \verb|pcall| function \see{pdf-pcall}.
|
||||
|
||||
Every table and userdata value in Lua may have a \emph{metatable}.
|
||||
This \IndexEmph{metatable} is a table that defines the behavior of
|
||||
the original table and userdata under some operations.
|
||||
the original table and userdata under certain special operations.
|
||||
You can query and change the metatable of an object with
|
||||
functions \verb|setmetatable| and \verb|getmetatable| \see{pdf-getmetatable}.
|
||||
|
||||
For each of those operations Lua associates a specific key,
|
||||
For each of those operations Lua associates a specific key
|
||||
called an \emph{event}.
|
||||
When Lua performs one of those operations over a table or a userdata,
|
||||
if checks whether that object has a metatable with the corresponding event.
|
||||
@ -1613,7 +1617,7 @@ called when Lua calls a value.
|
||||
else
|
||||
local h = metatable(func).__call
|
||||
if h then
|
||||
tinsert(arg, 1, func)
|
||||
table.insert(arg, 1, func)
|
||||
return h(unpack(arg))
|
||||
else
|
||||
error("call expression not a function")
|
||||
@ -1650,16 +1654,16 @@ with the last userdata created in the program
|
||||
\subsection{Coroutines}
|
||||
|
||||
Lua supports coroutines,
|
||||
also called \emph{semi-coroutines}, \emph{generators},
|
||||
or \emph{colaborative multithreading}.
|
||||
also called \emph{semi-coroutines}
|
||||
or \emph{collaborative multithreading}.
|
||||
A coroutine in Lua represents an independent thread of execution.
|
||||
Unlike ``real'' threads, however,
|
||||
a coroutine only suspends its execution by explicitly calling
|
||||
an yield function.
|
||||
|
||||
You create a coroutine with a call to \IndexVerb{coroutine.create}.
|
||||
Its sole argument is a function,
|
||||
which is the main function of the coroutine.
|
||||
Its sole argument is a function
|
||||
that is the main function of the coroutine.
|
||||
The \verb|coroutine.create| only creates a new coroutine and
|
||||
returns a handle to it (an object of type \emph{thread}).
|
||||
It does not start the coroutine execution.
|
||||
@ -1679,10 +1683,10 @@ Normally, when its main function returns
|
||||
and abnormally, if there is an unprotected error.
|
||||
In the first case, \verb|coroutine.resume| returns \True,
|
||||
plus any values returned by the coroutine main function.
|
||||
In case of errors, \verb|coroutine.resume| returns \False
|
||||
In case of errors, \verb|coroutine.resume| returns \False{}
|
||||
plus an error message.
|
||||
|
||||
A coroutine yields calling \IndexVerb{coroutine.yield}.
|
||||
A coroutine yields by calling \IndexVerb{coroutine.yield}.
|
||||
When a coroutine yields,
|
||||
the corresponding \verb|coroutine.resume| returns immediately,
|
||||
even if the yield happens inside nested function calls
|
||||
@ -1818,7 +1822,7 @@ The following function creates a new ``thread'' in Lua:
|
||||
The new state returned by this function shares with the original state
|
||||
all global environment (such as tables),
|
||||
but has an independent run-time stack.
|
||||
(The use of these multiple stacks must be ``syncronized'' with C.
|
||||
(The use of these multiple stacks must be ``synchronized'' with C.
|
||||
How to explain that? TO BE WRITTEN.)
|
||||
|
||||
Each thread has an independent table for global variables.
|
||||
@ -1841,9 +1845,9 @@ Each element in this stack represents a Lua value
|
||||
|
||||
Each C invocation has its own stack.
|
||||
Whenever Lua calls C, the called function gets a new stack,
|
||||
which is independent of previous stacks or of stacks of still
|
||||
which is independent of previous stacks and of stacks of still
|
||||
active C functions.
|
||||
That stack contains initially any arguments to the C function,
|
||||
That stack initially contains any arguments to the C function,
|
||||
and it is where the C function pushes its results \see{LuacallC}.
|
||||
|
||||
For convenience,
|
||||
@ -1906,7 +1910,7 @@ as follows:
|
||||
\end{verbatim}
|
||||
Note that 0 is never an acceptable index.
|
||||
|
||||
Unless otherwise noticed,
|
||||
Unless otherwise noted,
|
||||
any function that accepts valid indices can also be called with
|
||||
\Index{pseudo-indices},
|
||||
which represent some Lua values that are accessible to the C~code
|
||||
@ -2004,6 +2008,7 @@ defined in \verb|lua.h|:
|
||||
\verb|LUA_TTABLE|,
|
||||
\verb|LUA_TFUNCTION|,
|
||||
\verb|LUA_TUSERDATA|,
|
||||
\verb|LUA_TTHREAD|,
|
||||
\verb|LUA_TLIGHTUSERDATA|.
|
||||
The following function translates such constants to a type name:
|
||||
\begin{verbatim}
|
||||
@ -2021,10 +2026,10 @@ They always return 0 for a non-valid index.
|
||||
\verb|lua_isnumber| accepts numbers and numerical strings,
|
||||
\verb|lua_isstring| accepts strings and numbers \see{coercion},
|
||||
\verb|lua_isfunction| accepts both Lua functions and C~functions,
|
||||
and \verb|lua_isuserdata| accepts both full and ligth userdata.
|
||||
and \verb|lua_isuserdata| accepts both full and light userdata.
|
||||
To distinguish between Lua functions and C~functions,
|
||||
you should use \verb|lua_iscfunction|.
|
||||
To distinguish between full and ligth userdata,
|
||||
To distinguish between full and light userdata,
|
||||
you can use \verb|lua_islightuserdata|.
|
||||
To distinguish between numbers and numerical strings,
|
||||
you can use \verb|lua_type|.
|
||||
@ -2090,7 +2095,7 @@ you can use \verb|lua_strlen| to get its actual length.
|
||||
Because Lua has garbage collection,
|
||||
there is no guarantee that the pointer returned by \verb|lua_tostring|
|
||||
will be valid after the corresponding value is removed from the stack.
|
||||
So, if you need the string after the current function returns,
|
||||
If you need the string after the current function returns,
|
||||
then you should duplicate it (or put it into the registry \see{registry}).
|
||||
|
||||
\verb|lua_tocfunction| converts a value in the stack to a C~function.
|
||||
@ -2158,7 +2163,7 @@ The conversion specifiers can be simply
|
||||
|
||||
Lua uses two numbers to control its garbage collection:
|
||||
the \emph{count} and the \emph{threshold} \see{GC}.
|
||||
The first counts the ammount of memory in use by Lua;
|
||||
The first counts the amount of memory in use by Lua;
|
||||
when the count reaches the threshold,
|
||||
Lua runs its garbage collector.
|
||||
After the collection, the count is updated,
|
||||
@ -2183,7 +2188,7 @@ Lua sets the new threshold and checks it against the byte counter.
|
||||
If the new threshold is smaller than the byte counter,
|
||||
then Lua immediately runs the garbage collector.
|
||||
In particular
|
||||
\verb|lua_setgcthreshold(L,0)| forces a garbage collectiion.
|
||||
\verb|lua_setgcthreshold(L,0)| forces a garbage collection.
|
||||
After the collection,
|
||||
a new threshold is set according to the previous rule.
|
||||
|
||||
@ -2203,8 +2208,8 @@ Lua supports two types of userdata:
|
||||
A full userdata represents a block of memory.
|
||||
It is an object (like a table):
|
||||
You must create it, it can have its own metatable,
|
||||
you can detect when it is being collected.
|
||||
A full userdata is only equal to itself.
|
||||
and you can detect when it is being collected.
|
||||
A full userdata is only equal to itself (under raw equality).
|
||||
|
||||
A light userdata represents a pointer.
|
||||
It is a value (like a number):
|
||||
@ -2305,7 +2310,7 @@ to ensure that, it always receives \verb|NULL| as the Lua state.
|
||||
The \emph{chunkname} is used for error messages
|
||||
and debug information \see{debugI}.
|
||||
|
||||
See the auxiliar library (\verb|lauxlib|)
|
||||
See the auxiliary library (\verb|lauxlib|)
|
||||
for examples of how to use \verb|lua_load|,
|
||||
and for some ready-to-use functions to load chunks
|
||||
from files and from strings.
|
||||
@ -2457,7 +2462,7 @@ The function results are pushed onto the stack in direct order
|
||||
so that after the call the last result is on the top.
|
||||
|
||||
The following example shows how the host program may do the
|
||||
equivalent to the Lua code:
|
||||
equivalent to this Lua code:
|
||||
\begin{verbatim}
|
||||
a = f("how", t.x, 14)
|
||||
\end{verbatim}
|
||||
@ -2482,7 +2487,7 @@ This is considered good programming practice.
|
||||
|
||||
(We did this example using only the raw functions provided by Lua's API,
|
||||
to show all the details.
|
||||
Usually programmers use several macros and auxiliar functions that
|
||||
Usually programmers use several macros and auxiliary functions that
|
||||
provide higher level access to Lua.)
|
||||
|
||||
|
||||
@ -2591,6 +2596,8 @@ its first argument (if any) is at index 1.
|
||||
To return values to Lua, a C~function just pushes them onto the stack,
|
||||
in direct order (the first result is pushed first),
|
||||
and returns the number of results.
|
||||
Any other value in the stack below the results will be properly
|
||||
discharged by Lua.
|
||||
Like a Lua function, a C~function called by Lua can also return
|
||||
many results.
|
||||
|
||||
@ -2637,10 +2644,10 @@ by calling
|
||||
\subsection{Defining C Closures} \label{c-closure}
|
||||
|
||||
When a C~function is created,
|
||||
it is possible to associate some values to it,
|
||||
it is possible to associate some values with it,
|
||||
thus creating a \IndexEmph{C~closure};
|
||||
these values are then accessible to the function whenever it is called.
|
||||
To associate values to a C~function,
|
||||
To associate values with a C~function,
|
||||
first these values should be pushed onto the stack
|
||||
(when there are multiple values, the first value is pushed first).
|
||||
Then the function
|
||||
@ -2680,7 +2687,7 @@ Typically, you should use as key a string containing your library name,
|
||||
or a light userdata with the address of a C object in your code.
|
||||
|
||||
The integer keys in the registry are used by the reference mechanism,
|
||||
implemented by the auxiliar library,
|
||||
implemented by the auxiliary library,
|
||||
and therefore should not be used by other purposes.
|
||||
|
||||
|
||||
@ -2688,9 +2695,9 @@ and therefore should not be used by other purposes.
|
||||
\section{The Debug Interface} \label{debugI}
|
||||
|
||||
Lua has no built-in debugging facilities.
|
||||
Instead, it offers a special interface,
|
||||
by means of functions and \emph{hooks},
|
||||
which allows the construction of different
|
||||
Instead, it offers a special interface
|
||||
by means of functions and \emph{hooks}.
|
||||
This interface allows the construction of different
|
||||
kinds of debuggers, profilers, and other tools
|
||||
that need ``inside information'' from the interpreter.
|
||||
|
||||
@ -2825,16 +2832,15 @@ local variables of a given activation record:
|
||||
const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);
|
||||
\end{verbatim}
|
||||
\DefAPI{lua_getlocal}\DefAPI{lua_setlocal}
|
||||
The parameter \verb|ar| must be a valid activation record,
|
||||
The parameter \verb|ar| must be a valid activation record that was
|
||||
filled by a previous call to \verb|lua_getstack| or
|
||||
given as argument to a hook \see{sub-hooks}.
|
||||
was given as argument to a hook \see{sub-hooks}.
|
||||
\verb|lua_getlocal| gets the index \verb|n| of a local variable,
|
||||
pushes its value onto the stack,
|
||||
pushes the variable's value onto the stack,
|
||||
and returns its name.
|
||||
\verb|lua_setlocal| assigns the value at the top of the stack
|
||||
to the variable and returns its name.
|
||||
Both functions return \verb|NULL| on failure,
|
||||
that is
|
||||
Both functions return \verb|NULL|
|
||||
when the index is greater than
|
||||
the number of active local variables.
|
||||
|
||||
@ -2858,16 +2864,18 @@ local variables for a function at a given level of the stack:
|
||||
|
||||
\subsection{Hooks}\label{sub-hooks}
|
||||
|
||||
The Lua interpreter offers a mechanism of hooks:
|
||||
The Lua interpreter offers a mechanism of hooks, which are
|
||||
user-defined C functions that are called during the program execution.
|
||||
A hook may be called in four different events:
|
||||
a \emph{call} event, when Lua calls a function;
|
||||
a \emph{return} event, when Lua returns from a function;
|
||||
a \emph{line} event, when Lua starts executing a new line of code;
|
||||
and a \emph{count} event, that happens every ``count'' instructions.
|
||||
and a \emph{count} event, which happens every ``count'' instructions.
|
||||
Lua identifies them with the following constants:
|
||||
\DefAPI{LUA_HOOKCALL}, \DefAPI{LUA_HOOKRET},
|
||||
\DefAPI{LUA_HOOKLINE}, and \DefAPI{LUA_HOOKCOUNT}.
|
||||
\verb|LUA_HOOKCALL|\DefAPI{LUA_HOOKCALL},
|
||||
\verb|LUA_HOOKRET|\DefAPI{LUA_HOOKRET},
|
||||
\verb|LUA_HOOKLINE|\DefAPI{LUA_HOOKLINE},
|
||||
and \verb|LUA_HOOKCOUNT|\DefAPI{LUA_HOOKCOUNT}.
|
||||
|
||||
A hook has type \verb|lua_Hook|, defined as follows:
|
||||
\begin{verbatim}
|
||||
@ -2888,18 +2896,18 @@ It is formed by a disjunction of the constants
|
||||
plus the macro \verb|LUA_MASKCOUNT(count)|.
|
||||
For each event, the hook is called as explained below:
|
||||
\begin{description}
|
||||
\item{call hook} called when the interpreter calls a function.
|
||||
\item{The call hook} is called when the interpreter calls a function.
|
||||
The hook is called just after Lua ``enters'' the new function.
|
||||
\item{return hook} called when the interpreter returns from a function.
|
||||
\item{The return hook} is called when the interpreter returns from a function.
|
||||
The hook is called just before Lua ``leaves'' the function.
|
||||
\item{line hook} called when the interpreter is about to
|
||||
\item{The line hook} is called when the interpreter is about to
|
||||
start the execution of a new line of code,
|
||||
or when it jumps back (even for the same line).
|
||||
(For obvious reasons, this event does not happens while Lua is executing
|
||||
(For obvious reasons, this event does not happen while Lua is executing
|
||||
a C function.)
|
||||
\item{count hook} called after the interpreter executes every
|
||||
\item{The count hook} is called after the interpreter executes every
|
||||
\verb|count| instructions.
|
||||
(For obvious reasons, this event does not happens while Lua is executing
|
||||
(For obvious reasons, this event does not happen while Lua is executing
|
||||
a C function.)
|
||||
\end{description}
|
||||
|
||||
@ -2920,7 +2928,7 @@ For the value of any other field, the hook must call \verb|lua_getinfo|.
|
||||
|
||||
While Lua is running a hook, it disables other calls to hooks.
|
||||
Therefore, if a hook calls Lua to execute a function or a chunk,
|
||||
that execution ocurrs without any calls to hooks.
|
||||
that execution occurs without any calls to hooks.
|
||||
|
||||
|
||||
%------------------------------------------------------------------------------
|
||||
@ -2930,7 +2938,7 @@ The standard libraries provide useful functions
|
||||
that are implemented directly through the standard C~API.
|
||||
Some of these functions provide essential services to the language
|
||||
(e.g. \verb|type| and \verb|getmetatable|);
|
||||
others provide access to ``outside'' servides (e.g. I/O);
|
||||
others provide access to ``outside'' services (e.g. I/O);
|
||||
and others could be implemented in Lua itself,
|
||||
but are quite useful or have critical performance to
|
||||
deserve an implementation in C (e.g. \verb|sort|).
|
||||
@ -2995,7 +3003,7 @@ This function is equivalent to the following Lua function:
|
||||
|
||||
\subsubsection*{\ff \T{collectgarbage ([limit])}}\DefLIB{collectgarbage}
|
||||
|
||||
Sets the garbage-collection threshold for the given limit
|
||||
Sets the garbage-collection threshold to the given limit
|
||||
(in Kbytes), and checks it against the byte counter.
|
||||
If the new threshold is smaller than the byte counter,
|
||||
then Lua immediately runs the garbage collector \see{GC}.
|
||||
@ -3010,12 +3018,12 @@ When called without arguments,
|
||||
Returns any value returned by the chunk.
|
||||
|
||||
\subsubsection*{\ff \T{error (message [, level])}}
|
||||
DefLIB{error}\label{pdf-error}
|
||||
\DefLIB{error}\label{pdf-error}
|
||||
Terminates the last protected function called,
|
||||
and returns \verb|message| as the error message.
|
||||
Function \verb|error| never returns.
|
||||
|
||||
The \verb|level| argument affects to where the error
|
||||
The \verb|level| argument specifies where the error
|
||||
message points the error.
|
||||
With level 1 (the default), the error position is where the
|
||||
\verb|error| function was called.
|
||||
@ -3025,7 +3033,7 @@ that called \verb|error| was called; and so on.
|
||||
\subsubsection*{\ff \T{getglobals (function)}}\DefLIB{getglobals}
|
||||
Returns the current table of globals in use by the function.
|
||||
\verb|function| can be a Lua function or a number,
|
||||
meaning the function at that stack level:
|
||||
which specifies the function at that stack level:
|
||||
Level 1 is the function calling \verb|getglobals|.
|
||||
If the given function is not a Lua function,
|
||||
returns the ``global'' table of globals.
|
||||
@ -3054,19 +3062,19 @@ up to the first nil value of the table.
|
||||
|
||||
\subsubsection*{\ff \T{loadfile (filename)}}\DefLIB{loadfile}
|
||||
Loads a file as a Lua chunk.
|
||||
If there is no errors,
|
||||
If there are no errors,
|
||||
returns the compiled chunk as a function;
|
||||
otherwise, returns \nil{} plus an error message.
|
||||
|
||||
\subsubsection*{\ff \T{loadstring (string [, chunkname])}}\DefLIB{loadstring}
|
||||
Loads a string as a Lua chunk.
|
||||
If there is no errors,
|
||||
If there are no errors,
|
||||
returns the compiled chunk as a function;
|
||||
otherwise, returns \nil{} plus an error message.
|
||||
|
||||
The optional parameter \verb|chunkname|
|
||||
is the ``name of the chunk'',
|
||||
used in error messages and debug information.
|
||||
which is used in error messages and debug information.
|
||||
|
||||
To load and run a given string, use the idiom
|
||||
\begin{verbatim}
|
||||
@ -3092,16 +3100,16 @@ semantically, there is no difference between a
|
||||
field not present in a table or a field with value \nil.
|
||||
Therefore, \verb|next| only considers fields with non-\nil{} values.
|
||||
The order in which the indices are enumerated is not specified,
|
||||
\emph{even for numeric indices}
|
||||
(to traverse a table in numeric order,
|
||||
use a numerical \rwd{for} or the function \verb|ipairs|).
|
||||
\emph{even for numeric indices}.
|
||||
(To traverse a table in numeric order,
|
||||
use a numerical \rwd{for} or the function \verb|ipairs|.)
|
||||
|
||||
The behavior of \verb|next| is \emph{undefined} if you change
|
||||
The behavior of \verb|next| is \emph{undefined} if you modify
|
||||
the table during the traversal.
|
||||
|
||||
\subsubsection*{\ff \T{pairs (t)}}\DefLIB{pairs}
|
||||
|
||||
Returns the function \verb|next| and the table \verb|t|,
|
||||
Returns the function \verb|next| and the table \verb|t| (plus a \nil),
|
||||
so that the construction
|
||||
\begin{verbatim}
|
||||
for k,v in pairs(t) do ... end
|
||||
@ -3113,10 +3121,10 @@ will iterate over all pairs of key--value of table \verb|t|.
|
||||
Calls function \verb|func| with
|
||||
the given arguments in protected mode.
|
||||
That means that any error inside \verb|func| is not propagated;
|
||||
instead, \verb|pcall| catches the error,
|
||||
returning a status code.
|
||||
instead, \verb|pcall| catches the error
|
||||
and returns a status code.
|
||||
Its first result is the status code (a boolean),
|
||||
true if the call succeeds without errors.
|
||||
which is true if the call succeeds without errors.
|
||||
In such case, \verb|pcall| also returns all results from the call,
|
||||
after this first result.
|
||||
In case of any error, \verb|pcall| returns false plus the error message.
|
||||
@ -3147,14 +3155,14 @@ and \verb|value| is any Lua value.
|
||||
|
||||
Loads the given package.
|
||||
The function starts by looking into the table \IndexVerb{_LOADED}
|
||||
whether \verb|packagename| is already loaded.
|
||||
to determine whether \verb|packagename| is already loaded.
|
||||
If it is, then \verb|require| is done.
|
||||
Otherwise, it searches a path looking for a file to load.
|
||||
|
||||
If the global variable \IndexVerb{LUA_PATH} is a string,
|
||||
this string is the path.
|
||||
Otherwise, \verb|require| tries the environment variable \verb|LUA_PATH|.
|
||||
In the last resort, it uses a predefined path.
|
||||
As a last resort, it uses a predefined path.
|
||||
|
||||
The path is a sequence of \emph{templates} separated by semicolons.
|
||||
For each template, \verb|require| will change an eventual interrogation
|
||||
@ -3185,7 +3193,7 @@ with the package name.
|
||||
\subsubsection*{\ff \T{setglobals (function, table)}}\DefLIB{setglobals}
|
||||
Sets the current table of globals to be used by the given function.
|
||||
\verb|function| can be a Lua function or a number,
|
||||
meaning the function at that stack level:
|
||||
which specifies the function at that stack level:
|
||||
Level 1 is the function calling \verb|setglobals|.
|
||||
|
||||
\subsubsection*{\ff \T{setmetatable (table, metatable)}}\DefLIB{setmetatable}
|
||||
@ -3286,7 +3294,7 @@ Note that if \verb|plain| is given, then \verb|init| must be given too.
|
||||
Receives a string and returns its length.
|
||||
The empty string \verb|""| has length 0.
|
||||
Embedded zeros are counted,
|
||||
and so \verb|"a\000b\000c"| has length 5.
|
||||
so \verb|"a\000b\000c"| has length 5.
|
||||
|
||||
\subsubsection*{\ff \T{string.lower (s)}}\DefLIB{string.lower}
|
||||
Receives a string and returns a copy of that string with all
|
||||
@ -3299,8 +3307,8 @@ Returns a string that is the concatenation of \verb|n| copies of
|
||||
the string \verb|s|.
|
||||
|
||||
\subsubsection*{\ff \T{string.sub (s, i [, j])}}\DefLIB{string.sub}
|
||||
Returns another string, which is a substring of \verb|s|,
|
||||
starting at \verb|i| and running until \verb|j|;
|
||||
Returns another string, which is the substring of \verb|s| that
|
||||
starts at \verb|i| and continues until \verb|j|;
|
||||
\verb|i| and \verb|j| may be negative.
|
||||
If \verb|j| is absent, then it is assumed to be equal to \Math{-1}
|
||||
(which is the same as the string length).
|
||||
@ -3371,7 +3379,7 @@ As an example, the following loop
|
||||
end
|
||||
\end{verbatim}
|
||||
will iterate over all the words from string \verb|s|,
|
||||
printing each one in a line.
|
||||
printing one per line.
|
||||
The next example collects all pairs \verb|key=value| from the
|
||||
given string into a table:
|
||||
\begin{verbatim}
|
||||
@ -3561,10 +3569,10 @@ A pattern cannot contain embedded zeros. Use \verb|%z| instead.
|
||||
|
||||
|
||||
\subsection{Table Manipulation}
|
||||
This library provides generic functions for table manipulation,
|
||||
This library provides generic functions for table manipulation.
|
||||
It provides all its functions inside the table \IndexLIB{table}.
|
||||
|
||||
Most functions in the table library library assume that the table
|
||||
Most functions in the table library assume that the table
|
||||
represents an array or a list.
|
||||
For those functions, an important concept is the \emph{size} of the array.
|
||||
There are three ways to specify that size:
|
||||
@ -3655,7 +3663,7 @@ The default value for \verb|pos| is \verb|n+1|,
|
||||
where \verb|n| is the size of the table \see{getn},
|
||||
so that a call \verb|table.insert(t,x)| inserts \verb|x| at the end
|
||||
of table \verb|t|.
|
||||
This function also updates the size of the table,
|
||||
This function also updates the size of the table by
|
||||
calling \verb|table.setn(table, n+1)|.
|
||||
|
||||
\subsubsection*{\ff \T{table.remove (table [, pos])}}\DefLIB{table.remove}
|
||||
@ -3667,7 +3675,7 @@ The default value for \verb|pos| is \verb|n|,
|
||||
where \verb|n| is the size of the table \see{getn},
|
||||
so that a call \verb|tremove(t)| removes the last element
|
||||
of table \verb|t|.
|
||||
This function also updates the size of the table,
|
||||
This function also updates the size of the table by
|
||||
calling \verb|table.setn(table, n-1)|.
|
||||
|
||||
\subsubsection*{\ff \T{table.setn (table, n)}}\DefLIB{table.setn}
|
||||
@ -3681,9 +3689,10 @@ so that subsequent calls to \verb|table.getn(table)| return \verb|n|.
|
||||
|
||||
\subsection{Mathematical Functions} \label{mathlib}
|
||||
|
||||
This library is an interface to most functions of the standard C~math library.
|
||||
This library is an interface to most of the functions of the
|
||||
standard C~math library.
|
||||
(Some have slightly different names.)
|
||||
It provides all its functions inside the table \DefLIB{math}.
|
||||
It provides all its functions inside the table \verb|math|\DefLIB{math}.
|
||||
In addition,
|
||||
it registers a ??tag method for the binary exponentiation operator \verb|^|
|
||||
that returns \Math{x^y} when applied to numbers \verb|x^y|.
|
||||
@ -3707,7 +3716,7 @@ The library provides the following functions:
|
||||
\end{verbatim}
|
||||
plus a variable \IndexLIB{math.pi}.
|
||||
Most of them
|
||||
are only interfaces to the homonymous functions in the C~library.
|
||||
are only interfaces to the corresponding functions in the C~library.
|
||||
All trigonometric functions work in radians.
|
||||
The functions \verb|math.deg| and \verb|math.rad| convert
|
||||
between radians and degrees.
|
||||
@ -3719,7 +3728,7 @@ Both can be used with 1, 2, or more arguments.
|
||||
|
||||
The functions \verb|math.random| and \verb|math.randomseed|
|
||||
are interfaces to the simple random generator functions
|
||||
\verb|rand| and \verb|srand|, provided by ANSI~C.
|
||||
\verb|rand| and \verb|srand| that are provided by ANSI~C.
|
||||
(No guarantees can be given for their statistical properties.)
|
||||
When called without arguments,
|
||||
\verb|math.random| returns a pseudo-random real number
|
||||
@ -3748,10 +3757,9 @@ When using explicit file descriptors,
|
||||
the operation \IndexLIB{io.open} returns a file descriptor,
|
||||
and then all operations are supplied as methods by the file descriptor.
|
||||
|
||||
Moreover, the table \verb|io| also provides
|
||||
three predefined file descriptors:
|
||||
\IndexLIB{io.stdin}, \IndexLIB{io.stdout}, and \IndexLIB{io.stderr},
|
||||
with their usual meaning from C.
|
||||
The table \verb|io| also provides
|
||||
three predefined file descriptors with their usual meanings from C:
|
||||
\IndexLIB{io.stdin}, \IndexLIB{io.stdout}, and \IndexLIB{io.stderr}.
|
||||
|
||||
A file handle is a userdata containing the file stream (\verb|FILE*|),
|
||||
with a distinctive metatable created by the I/O library.
|
||||
@ -3761,10 +3769,10 @@ all I/O functions return \nil{} on failure
|
||||
(plus an error message as a second result)
|
||||
and some value different from \nil{} on success.
|
||||
|
||||
\subsubsection*{\ff \T{io.close ([handle])}}\DefLIB{io.close}
|
||||
\subsubsection*{\ff \T{io.close ([file])}}\DefLIB{io.close}
|
||||
|
||||
Equivalent to \verb|file:close()|.
|
||||
Without a \verb|handle|, closes the default output file.
|
||||
Without a \verb|file|, closes the default output file.
|
||||
|
||||
\subsubsection*{\ff \T{io.flush ()}}\DefLIB{io.flush}
|
||||
|
||||
@ -3791,7 +3799,7 @@ each time it is called,
|
||||
returns a new line from the file.
|
||||
Therefore, the construction
|
||||
\begin{verbatim}
|
||||
for lines in io.lines(filename) do ... end
|
||||
for line in io.lines(filename) do ... end
|
||||
\end{verbatim}
|
||||
will iterate over all lines of the file.
|
||||
When the generator function detects the end of file,
|
||||
@ -3801,7 +3809,7 @@ The call \verb|io.lines()| (without a file name) is equivalent
|
||||
to \verb|io.input():lines()|, that is, it iterates over the
|
||||
lines of the default input file.
|
||||
|
||||
\subsubsection*{\ff \T{io.open (filename, mode)}}\DefLIB{io.open}
|
||||
\subsubsection*{\ff \T{io.open (filename [, mode])}}\DefLIB{io.open}
|
||||
|
||||
This function opens a file,
|
||||
in the mode specified in the string \verb|mode|.
|
||||
@ -3810,7 +3818,7 @@ or, in case of errors, \nil{} plus an error message.
|
||||
|
||||
The \verb|mode| string can be any of the following:
|
||||
\begin{description}\leftskip=20pt
|
||||
\item[``r''] read mode;
|
||||
\item[``r''] read mode (the default);
|
||||
\item[``w''] write mode;
|
||||
\item[``a''] append mode;
|
||||
\item[``r+''] update mode, all previous data is preserved;
|
||||
@ -3857,7 +3865,7 @@ each time it is called,
|
||||
returns a new line from the file.
|
||||
Therefore, the construction
|
||||
\begin{verbatim}
|
||||
for lines in file:lines() do ... end
|
||||
for line in file:lines() do ... end
|
||||
\end{verbatim}
|
||||
will iterate over all lines of the file.
|
||||
(Unlike \verb|io.lines|, this function does not close the file
|
||||
@ -3965,11 +3973,11 @@ When called without arguments,
|
||||
the host system and on the current locale
|
||||
(that is, \verb|os.date()| is equivalent to \verb|os.date("%c")|).
|
||||
|
||||
\subsubsection*{\ff \T{os.difftime (t1, t2)}}\DefLIB{os.difftime}
|
||||
\subsubsection*{\ff \T{os.difftime (t2, t1)}}\DefLIB{os.difftime}
|
||||
|
||||
Returns the number of seconds from time \verb|t1| to time \verb|t2|.
|
||||
In Posix, Windows, and some other systems,
|
||||
this value is exactly \verb|t1|\Math{-}\verb|t2|.
|
||||
this value is exactly \verb|t2|\Math{-}\verb|t1|.
|
||||
|
||||
\subsubsection*{\ff \T{os.execute (command)}}\DefLIB{os.execute}
|
||||
|
||||
@ -4024,7 +4032,7 @@ The returned value is a number, whose meaning depends on your system.
|
||||
In Posix, Windows, and some other systems, this number counts the number
|
||||
of seconds since some given start time (the ``epoch'').
|
||||
In other systems, the meaning is not specified,
|
||||
and the number returned bt \verb|time| can be used only as an argument to
|
||||
and the number returned by \verb|time| can be used only as an argument to
|
||||
\verb|date| and \verb|difftime|.
|
||||
|
||||
\subsubsection*{\ff \T{os.tmpname ()}}\DefLIB{os.tmpname}
|
||||
@ -4036,7 +4044,7 @@ and removed when no longer needed.
|
||||
|
||||
This function is equivalent to the \verb|tmpnam| C~function,
|
||||
and many people (and even some compilers!) advise against its use,
|
||||
because between the time you call the function
|
||||
because between the time you call this function
|
||||
and the time you open the file,
|
||||
it is possible for another process
|
||||
to create a file with the same name.
|
||||
@ -4073,15 +4081,15 @@ If \verb|function| is a number larger than the number of active functions,
|
||||
then \verb|getinfo| returns \nil.
|
||||
|
||||
The returned table contains all the fields returned by \verb|lua_getinfo|,
|
||||
with the string \verb|what| describing what to get.
|
||||
with the string \verb|what| describing which fields to fill in.
|
||||
The default for \verb|what| is to get all information available.
|
||||
If present,
|
||||
the option \verb|f|
|
||||
adds a field named \verb|func| with the function itself.
|
||||
|
||||
For instance, the expression \verb|getinfo(1,"n").name| returns
|
||||
For instance, the expression \verb|debug.getinfo(1,"n").name| returns
|
||||
the name of the current function, if a reasonable name can be found,
|
||||
and \verb|getinfo(print)| returns a table with all available information
|
||||
and \verb|debug.getinfo(print)| returns a table with all available information
|
||||
about the \verb|print| function.
|
||||
|
||||
|
||||
@ -4174,7 +4182,7 @@ When called without arguments,
|
||||
and as \verb|lua -| otherwise.
|
||||
|
||||
Before running any argument,
|
||||
the intepreter checks for an environment variable \IndexVerb{LUA_INIT}.
|
||||
the interpreter checks for an environment variable \IndexVerb{LUA_INIT}.
|
||||
If its format is \verb|@|\emph{filename},
|
||||
then lua executes the file.
|
||||
Otherwise, lua executes the string itself.
|
||||
@ -4235,11 +4243,11 @@ as in
|
||||
(Of course,
|
||||
the location of the Lua interpreter may be different in your machine.
|
||||
If \verb|lua| is in your \verb|PATH|,
|
||||
then a more portable solution is
|
||||
then
|
||||
\begin{verbatim}
|
||||
#!/usr/bin/env lua
|
||||
\end{verbatim}
|
||||
|
||||
is a more portable solution.)
|
||||
|
||||
%------------------------------------------------------------------------------
|
||||
\section*{Acknowledgments}
|
||||
@ -4342,7 +4350,7 @@ for unprotected calls,
|
||||
or the new \verb|pcall| function for protected calls.
|
||||
|
||||
\item
|
||||
\verb|dofile| do not handle errors, but simply propagate them.
|
||||
\verb|dofile| do not handle errors, but simply propagates them.
|
||||
|
||||
\item
|
||||
The \verb|read| option \verb|*w| is obsolete.
|
||||
|
Loading…
x
Reference in New Issue
Block a user