mirror of
https://github.com/lua/lua.git
synced 2025-01-14 05:43:00 +08:00
towards 5.0 alpha...
This commit is contained in:
parent
586e510577
commit
3b058177af
315
manual.tex
315
manual.tex
@ -1,4 +1,4 @@
|
|||||||
% $Id: manual.tex,v 1.56 2002/06/06 12:49:28 roberto Exp roberto $
|
% $Id: manual.tex,v 1.57 2002/08/06 19:10:44 roberto Exp roberto $
|
||||||
|
|
||||||
\documentclass[11pt,twoside,draft]{article}
|
\documentclass[11pt,twoside,draft]{article}
|
||||||
\usepackage{fullpage}
|
\usepackage{fullpage}
|
||||||
@ -133,7 +133,7 @@ Waldemar Celes
|
|||||||
\tecgraf\ --- Computer Science Department --- PUC-Rio
|
\tecgraf\ --- Computer Science Department --- PUC-Rio
|
||||||
}
|
}
|
||||||
|
|
||||||
%\date{{\small \tt\$Date: 2002/06/06 12:49:28 $ $}}
|
%\date{{\small \tt\$Date: 2002/08/06 19:10:44 $ $}}
|
||||||
|
|
||||||
\maketitle
|
\maketitle
|
||||||
|
|
||||||
@ -251,6 +251,8 @@ The evolution of an extension language: a history of Lua,
|
|||||||
\emph{Proceedings of V Brazilian Symposium on Programming Languages} (2001) B-14--B-28.
|
\emph{Proceedings of V Brazilian Symposium on Programming Languages} (2001) B-14--B-28.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
Lua means ``moon'' in Portuguese.
|
||||||
|
|
||||||
%------------------------------------------------------------------------------
|
%------------------------------------------------------------------------------
|
||||||
\section{Lua Concepts}\label{concepts}
|
\section{Lua Concepts}\label{concepts}
|
||||||
|
|
||||||
@ -293,6 +295,10 @@ Lua automatically detects the file type and acts accordingly.
|
|||||||
\index{pre-compilation}
|
\index{pre-compilation}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Table of Globals} \label{global-table}
|
||||||
|
|
||||||
|
????
|
||||||
|
|
||||||
\subsection{\Index{Values and Types}} \label{TypesSec}
|
\subsection{\Index{Values and Types}} \label{TypesSec}
|
||||||
|
|
||||||
Lua is a \emph{dynamically typed language}.
|
Lua is a \emph{dynamically typed language}.
|
||||||
@ -331,7 +337,7 @@ and has no pre-defined operations in Lua,
|
|||||||
except assignment and identity test.
|
except assignment and identity test.
|
||||||
However, by using \emph{metatables},
|
However, by using \emph{metatables},
|
||||||
the programmer can define operations for userdata values
|
the programmer can define operations for userdata values
|
||||||
\see{metatables}.
|
\see{metatable}.
|
||||||
Userdata values cannot be created or modified in Lua,
|
Userdata values cannot be created or modified in Lua,
|
||||||
only through the C~API.
|
only through the C~API.
|
||||||
This guarantees the integrity of data owned by the host program.
|
This guarantees the integrity of data owned by the host program.
|
||||||
@ -966,7 +972,7 @@ Tables, userdata, and functions are compared \emph{by reference},
|
|||||||
that is,
|
that is,
|
||||||
two tables are considered equal only if they are the \emph{same} table.
|
two tables are considered equal only if they are the \emph{same} table.
|
||||||
|
|
||||||
??eq metamethod??
|
%% TODO eq metamethod
|
||||||
|
|
||||||
Every time you create a new table (or userdata, or function),
|
Every time you create a new table (or userdata, or function),
|
||||||
this new value is different from any previously existing value.
|
this new value is different from any previously existing value.
|
||||||
@ -1358,43 +1364,18 @@ while all of them share the same \verb|x|.
|
|||||||
|
|
||||||
\subsection{Error Handling} \label{error}
|
\subsection{Error Handling} \label{error}
|
||||||
|
|
||||||
%% TODO Must be rewritten!!!
|
|
||||||
|
|
||||||
Because Lua is an extension language,
|
Because Lua is an extension language,
|
||||||
all Lua actions start from C~code in the host program
|
all Lua actions start from C~code in the host program
|
||||||
calling a function from the Lua library.
|
calling a function from the Lua library \see{pcall}.
|
||||||
Whenever an error occurs during Lua compilation or execution,
|
Whenever an error occurs during Lua compilation or execution,
|
||||||
the function \verb|_ERRORMESSAGE| is called \DefLIB{_ERRORMESSAGE}
|
control returns to C,
|
||||||
(provided it is different from \nil),
|
which can take appropriate measures
|
||||||
and then the corresponding function from the library
|
(such as to print an error message).
|
||||||
(\verb|lua_dofile|, \verb|lua_dostring|,
|
|
||||||
\verb|lua_dobuffer|, or \verb|lua_call|)
|
|
||||||
is terminated, returning an error condition.
|
|
||||||
|
|
||||||
Memory allocation errors are an exception to the previous rule.
|
|
||||||
When memory allocation fails, Lua may not be able to execute the
|
|
||||||
\verb|_ERRORMESSAGE| function.
|
|
||||||
So, for this kind of error, Lua does not call
|
|
||||||
the \verb|_ERRORMESSAGE| function;
|
|
||||||
instead, the corresponding function from the library
|
|
||||||
returns immediately with a special error code (\verb|LUA_ERRMEM|).
|
|
||||||
This and other error codes are defined in \verb|lua.h|
|
|
||||||
\see{luado}.
|
|
||||||
|
|
||||||
The only argument to \verb|_ERRORMESSAGE| is a string
|
|
||||||
describing the error.
|
|
||||||
The default definition for
|
|
||||||
this function calls \verb|_ALERT|, \DefLIB{_ALERT}
|
|
||||||
which prints the message to \verb|stderr| \see{alert}.
|
|
||||||
The standard I/O library redefines \verb|_ERRORMESSAGE|
|
|
||||||
and uses the debug interface \see{debugI}
|
|
||||||
to print some extra information,
|
|
||||||
such as a call-stack traceback.
|
|
||||||
|
|
||||||
Lua code can explicitly generate an error by calling the
|
Lua code can explicitly generate an error by calling the
|
||||||
function \verb|error| \see{pdf-error}.
|
function \verb|error| \see{pdf-error}.
|
||||||
Lua code can ``catch'' an error using the function
|
If you need to catch errors in Lua,
|
||||||
\verb|call| \see{pdf-call}.
|
you can use the \verb|pcall| function \see{pdf-pcall}.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Metatables} \label{metatable}
|
\subsection{Metatables} \label{metatable}
|
||||||
@ -2161,14 +2142,32 @@ when applied on a non-userdata value, it returns \verb|NULL|.
|
|||||||
|
|
||||||
When Lua collects a full userdata,
|
When Lua collects a full userdata,
|
||||||
it calls its \verb|gc| metamethod, if any,
|
it calls its \verb|gc| metamethod, if any,
|
||||||
and then it automatically frees its corresponding memory.
|
and then it frees its corresponding memory.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Metatables}
|
\subsection{Metatables}
|
||||||
|
|
||||||
%% TODO
|
The following functions allow you do manipulate the metatables
|
||||||
|
of an object:
|
||||||
|
\begin{verbatim}
|
||||||
|
int lua_getmetatable (lua_State *L, int objindex);
|
||||||
|
int lua_setmetatable (lua_State *L, int objindex);
|
||||||
|
\end{verbatim}
|
||||||
|
\DefAPI{lua_getmetatable}\DefAPI{lua_setmetatable}
|
||||||
|
Both get at \verb|objindex| a valid index for an object.
|
||||||
|
\verb|lua_getmetatable| pushes on the stack the metatable of that object;
|
||||||
|
\verb|lua_setmetatable| sets the table on the top of the stack as the
|
||||||
|
new metatable for that object (and pops the table).
|
||||||
|
|
||||||
|
If the object does not have a metatable,
|
||||||
|
\verb|lua_getmetatable| returns 0, and pushes nothing on the stack.
|
||||||
|
\verb|lua_setmetatable| returns 0 when it cannot
|
||||||
|
set the metatable of the given object
|
||||||
|
(that is, when the object is not a userdata nor a table);
|
||||||
|
even then it pops the table from the stack.
|
||||||
|
|
||||||
\subsection{Loading Lua Chunks}
|
\subsection{Loading Lua Chunks}
|
||||||
|
|
||||||
You can load a Lua chunk with
|
You can load a Lua chunk with
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
typedef const char * (*lua_Chunkreader)
|
typedef const char * (*lua_Chunkreader)
|
||||||
@ -2183,9 +2182,10 @@ Everytime it needs another piece of the chunk,
|
|||||||
it calls the reader,
|
it calls the reader,
|
||||||
passing along its \verb|data| parameter.
|
passing along its \verb|data| parameter.
|
||||||
The reader must return a pointer to a block of memory
|
The reader must return a pointer to a block of memory
|
||||||
with the part of the chunk,
|
with a new part of the chunk,
|
||||||
and set \verb|size| to the block size.
|
and set \verb|size| to the block size.
|
||||||
To signal the end of the chunk, the reader must return \verb|NULL|.
|
To signal the end of the chunk, the reader must return \verb|NULL|.
|
||||||
|
The reader function may return pieces of any size greater than zero.
|
||||||
|
|
||||||
In the current implementation,
|
In the current implementation,
|
||||||
the reader function cannot call any Lua function;
|
the reader function cannot call any Lua function;
|
||||||
@ -2214,43 +2214,6 @@ for examples of how to use \verb|lua_load|,
|
|||||||
and for some ready-to-use functions to load chunks
|
and for some ready-to-use functions to load chunks
|
||||||
from files and from strings.
|
from files and from strings.
|
||||||
|
|
||||||
|
|
||||||
\subsection{Executing Lua Chunks}\label{luado}
|
|
||||||
>>>>
|
|
||||||
A host program can execute Lua chunks written in a file or in a string
|
|
||||||
by using the following functions:
|
|
||||||
\begin{verbatim}
|
|
||||||
int lua_dofile (lua_State *L, const char *filename);
|
|
||||||
int lua_dostring (lua_State *L, const char *string);
|
|
||||||
int lua_dobuffer (lua_State *L, const char *buff,
|
|
||||||
size_t size, const char *name);
|
|
||||||
\end{verbatim}
|
|
||||||
\DefAPI{lua_dofile}\DefAPI{lua_dostring}\DefAPI{lua_dobuffer}%
|
|
||||||
These functions return
|
|
||||||
0 in case of success, or one of the following error codes
|
|
||||||
(defined in \verb|lua.h|)
|
|
||||||
if they fail:
|
|
||||||
\begin{itemize}
|
|
||||||
\item \IndexAPI{LUA_ERRRUN} ---
|
|
||||||
error while running the chunk.
|
|
||||||
\item \IndexAPI{LUA_ERRSYNTAX} ---
|
|
||||||
syntax error during pre-compilation.
|
|
||||||
\item \IndexAPI{LUA_ERRMEM} ---
|
|
||||||
memory allocation error.
|
|
||||||
For such errors, Lua does not call \verb|_ERRORMESSAGE| \see{error}.
|
|
||||||
\item \IndexAPI{LUA_ERRERR} ---
|
|
||||||
error while running \verb|_ERRORMESSAGE|.
|
|
||||||
For such errors, Lua does not call \verb|_ERRORMESSAGE| again, to avoid loops.
|
|
||||||
\item \IndexAPI{LUA_ERRFILE} ---
|
|
||||||
error opening the file (only for \verb|lua_dofile|).
|
|
||||||
In this case,
|
|
||||||
you may want to
|
|
||||||
check \verb|errno|,
|
|
||||||
call \verb|strerror|,
|
|
||||||
or call \verb|perror| to tell the user what went wrong.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Manipulating Tables}
|
\subsection{Manipulating Tables}
|
||||||
|
|
||||||
Tables are created by calling
|
Tables are created by calling
|
||||||
@ -2426,7 +2389,54 @@ to show all the details.
|
|||||||
Usually programmers use several macros and auxiliar functions that
|
Usually programmers use several macros and auxiliar functions that
|
||||||
provide higher level access to Lua.)
|
provide higher level access to Lua.)
|
||||||
|
|
||||||
%% TODO: pcall
|
|
||||||
|
\subsection{Protected Calls}\label{pcall}
|
||||||
|
|
||||||
|
When you call a function with \verb|lua_call|,
|
||||||
|
any error inside the called function is propagated upwards
|
||||||
|
(with a \verb|longjmp|).
|
||||||
|
If you need to handle errors,
|
||||||
|
then you should use \verb|lua_pcall|:
|
||||||
|
\begin{verbatim}
|
||||||
|
int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
|
||||||
|
\end{verbatim}
|
||||||
|
Both \verb|nargs| and \verb|nresults| have the same meaning as
|
||||||
|
in \verb|lua_call|.
|
||||||
|
If there are no errors during the call,
|
||||||
|
\verb|lua_pcall| behaves exactly like \verb|lua_call|.
|
||||||
|
Like \verb|lua_call|,
|
||||||
|
\verb|lua_pcall| always removes the function
|
||||||
|
and its arguments from the stack.
|
||||||
|
However, if there is any error,
|
||||||
|
\verb|lua_pcall| catches it,
|
||||||
|
pushes a single value at the stack (the error message),
|
||||||
|
and returns an error code.
|
||||||
|
|
||||||
|
If \verb|errfunc| is 0,
|
||||||
|
then the error message returned is exactly the original error message.
|
||||||
|
Otherwise, \verb|errfunc| gives the stack index for an
|
||||||
|
\emph{error handler function}.
|
||||||
|
(In the current implementation, that index cannot be a pseudo-index.)
|
||||||
|
In case of runtime errors,
|
||||||
|
that function will be called with the error message,
|
||||||
|
and its return value will be the message returned by \verb|lua_pcall|.
|
||||||
|
|
||||||
|
Typically, the error handler function is used to add more debug
|
||||||
|
information to the error message, such as a stack traceback.
|
||||||
|
Such information cannot be gathered after the return of \verb|lua_pcall|,
|
||||||
|
since by then the stack has unwound.
|
||||||
|
|
||||||
|
The \verb|lua_pcall| function returns 0 in case of success,
|
||||||
|
or one of the following error codes
|
||||||
|
(defined in \verb|lua.h|):
|
||||||
|
\begin{itemize}
|
||||||
|
\item \IndexAPI{LUA_ERRRUN} --- a runtime error.
|
||||||
|
\item \IndexAPI{LUA_ERRMEM} --- memory allocation error.
|
||||||
|
For such errors, Lua does not call the error handler function.
|
||||||
|
\item \IndexAPI{LUA_ERRERR} ---
|
||||||
|
error while running the error handler function.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
|
|
||||||
@ -2494,8 +2504,10 @@ of numerical arguments and returns their average and sum:
|
|||||||
lua_Number sum = 0;
|
lua_Number sum = 0;
|
||||||
int i;
|
int i;
|
||||||
for (i = 1; i <= n; i++) {
|
for (i = 1; i <= n; i++) {
|
||||||
if (!lua_isnumber(L, i))
|
if (!lua_isnumber(L, i)) {
|
||||||
lua_error(L, "incorrect argument to function `average'");
|
lua_pushstring(L, "incorrect argument to function `average'");
|
||||||
|
lua_error(L);
|
||||||
|
}
|
||||||
sum += lua_tonumber(L, i);
|
sum += lua_tonumber(L, i);
|
||||||
}
|
}
|
||||||
lua_pushnumber(L, sum/n); /* first result */
|
lua_pushnumber(L, sum/n); /* first result */
|
||||||
@ -2565,8 +2577,8 @@ outside the life span of a C~function.
|
|||||||
This table is always located at pseudo-index
|
This table is always located at pseudo-index
|
||||||
\IndexAPI{LUA_REGISTRYINDEX}.
|
\IndexAPI{LUA_REGISTRYINDEX}.
|
||||||
Any C~library can store data into this table,
|
Any C~library can store data into this table,
|
||||||
as long as it chooses a key different from other libraries.
|
as long as it chooses keys different from other libraries.
|
||||||
Typically, you can use as key a string containing the library name,
|
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.
|
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,
|
The integer keys in the registry are used by the reference mechanism,
|
||||||
@ -2583,7 +2595,6 @@ by means of functions and \emph{hooks},
|
|||||||
which allows the construction of different
|
which allows the construction of different
|
||||||
kinds of debuggers, profilers, and other tools
|
kinds of debuggers, profilers, and other tools
|
||||||
that need ``inside information'' from the interpreter.
|
that need ``inside information'' from the interpreter.
|
||||||
This interface is declared in \verb|luadebug.h|.
|
|
||||||
|
|
||||||
\subsection{Stack and Function Information}
|
\subsection{Stack and Function Information}
|
||||||
|
|
||||||
@ -2683,15 +2694,10 @@ Because functions in Lua are first class values,
|
|||||||
they do not have a fixed name:
|
they do not have a fixed name:
|
||||||
Some functions may be the value of many global variables,
|
Some functions may be the value of many global variables,
|
||||||
while others may be stored only in a table field.
|
while others may be stored only in a table field.
|
||||||
The \verb|lua_getinfo| function checks whether the given
|
The \verb|lua_getinfo| function checks how the function was
|
||||||
function is a tag method or the value of a global variable.
|
called or whether it is the value of a global variable to
|
||||||
If the given function is a tag method,
|
find a suitable name.
|
||||||
then \verb|name| points to the event name.
|
If it cannot find a name,
|
||||||
%% TODO: mas qual o tag? Agora que temos tipos com nome, seria util saber
|
|
||||||
%% o tipo de TM. Em particular para mensagens de erro.
|
|
||||||
If the given function is the value of a global variable,
|
|
||||||
then \verb|name| points to the variable name.
|
|
||||||
If the given function is neither a tag method nor a global variable,
|
|
||||||
then \verb|name| is set to \verb|NULL|.
|
then \verb|name| is set to \verb|NULL|.
|
||||||
|
|
||||||
\item[namewhat]
|
\item[namewhat]
|
||||||
@ -2727,7 +2733,6 @@ given as argument to a hook \see{sub-hooks}.
|
|||||||
\verb|lua_getlocal| gets the index \verb|n| of a local variable,
|
\verb|lua_getlocal| gets the index \verb|n| of a local variable,
|
||||||
pushes its value onto the stack,
|
pushes its value onto the stack,
|
||||||
and returns its name.
|
and returns its name.
|
||||||
%% TODO: why return name?
|
|
||||||
\verb|lua_setlocal| assigns the value at the top of the stack
|
\verb|lua_setlocal| assigns the value at the top of the stack
|
||||||
to the variable and returns its name.
|
to the variable and returns its name.
|
||||||
Both functions return \verb|NULL| on failure,
|
Both functions return \verb|NULL| on failure,
|
||||||
@ -2860,33 +2865,6 @@ This function is equivalent to the following Lua function:
|
|||||||
end
|
end
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
??\subsubsection*{\ff \T{call (func, arg [, mode [, errhandler]])}}\DefLIB{call}
|
|
||||||
\label{pdf-call}
|
|
||||||
Calls function \verb|func| with
|
|
||||||
the arguments given by the table \verb|arg|.
|
|
||||||
The call is equivalent to
|
|
||||||
\begin{verbatim}
|
|
||||||
func(arg[1], arg[2], ..., arg[n])
|
|
||||||
\end{verbatim}
|
|
||||||
where \verb|n| is the result of \verb|getn(arg)| \see{getn}.
|
|
||||||
All results from \verb|func| are simply returned by \verb|call|.
|
|
||||||
|
|
||||||
By default,
|
|
||||||
if an error occurs during the call to \verb|func|,
|
|
||||||
the error is propagated.
|
|
||||||
If the string \verb|mode| contains \verb|"x"|,
|
|
||||||
then the call is \emph{protected}.\index{protected calls}
|
|
||||||
In this mode, function \verb|call| does not propagate an error,
|
|
||||||
regardless of what happens during the call.
|
|
||||||
Instead, it returns \nil{} to signal the error
|
|
||||||
(besides calling the appropriated error handler).
|
|
||||||
|
|
||||||
If \verb|errhandler| is provided,
|
|
||||||
the error function \verb|_ERRORMESSAGE| is temporarily set to \verb|errhandler|,
|
|
||||||
while \verb|func| runs.
|
|
||||||
In particular, if \verb|errhandler| is \nil,
|
|
||||||
no error messages will be issued during the execution of the called function.
|
|
||||||
|
|
||||||
\subsubsection*{\ff \T{collectgarbage ([limit])}}\DefLIB{collectgarbage}
|
\subsubsection*{\ff \T{collectgarbage ([limit])}}\DefLIB{collectgarbage}
|
||||||
|
|
||||||
Sets the garbage-collection threshold for the given limit
|
Sets the garbage-collection threshold for the given limit
|
||||||
@ -2935,6 +2913,16 @@ Returns the number of Kbytes of dynamic memory Lua is using,
|
|||||||
and (as a second result) the
|
and (as a second result) the
|
||||||
current garbage collector threshold (also in Kbytes).
|
current garbage collector threshold (also in Kbytes).
|
||||||
|
|
||||||
|
\subsubsection*{\ff \T{ipairs (t)}}\DefLIB{ipairs}
|
||||||
|
|
||||||
|
Returns the table \verb|t| and a generator function
|
||||||
|
so that the construction
|
||||||
|
\begin{verbatim}
|
||||||
|
for i,v in ipairs(t) do ... end
|
||||||
|
\end{verbatim}
|
||||||
|
will iterate over the pairs \verb|1, t[1]|, \verb|2, t[2]|, \ldots,
|
||||||
|
up to the first nil value of the table.
|
||||||
|
|
||||||
\subsubsection*{\ff \T{loadfile (filename)}}\DefLIB{loadfile}
|
\subsubsection*{\ff \T{loadfile (filename)}}\DefLIB{loadfile}
|
||||||
Loads a file as a Lua chunk.
|
Loads a file as a Lua chunk.
|
||||||
If there is no errors,
|
If there is no errors,
|
||||||
@ -2982,6 +2970,24 @@ 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 change
|
||||||
the table during the traversal.
|
the table during the traversal.
|
||||||
|
|
||||||
|
\subsubsection*{\ff \T{pairs (t)}}\DefLIB{pairs}
|
||||||
|
|
||||||
|
Returns the table \verb|t| and the function \verb|next|,
|
||||||
|
so that the construction
|
||||||
|
\begin{verbatim}
|
||||||
|
for k,v in pairs(t) do ... end
|
||||||
|
\end{verbatim}
|
||||||
|
will iterate over all pairs of key--value of table \verb|t|.
|
||||||
|
|
||||||
|
\subsubsection*{\ff \T{pcall (func, arg1, arg2, ...)}}\DefLIB{pcall}
|
||||||
|
\label{pdf-pcall}
|
||||||
|
Calls function \verb|func| with
|
||||||
|
the given arguments in protected mode.
|
||||||
|
Its first result is a boolean, 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.
|
||||||
|
|
||||||
\subsubsection*{\ff \T{print (e1, e2, ...)}}\DefLIB{print}
|
\subsubsection*{\ff \T{print (e1, e2, ...)}}\DefLIB{print}
|
||||||
Receives any number of arguments,
|
Receives any number of arguments,
|
||||||
and prints their values in \verb|stdout|,
|
and prints their values in \verb|stdout|,
|
||||||
@ -3225,6 +3231,10 @@ For example, \verb|"%*g"| can be simulated with
|
|||||||
String values to be formatted with
|
String values to be formatted with
|
||||||
\verb|%s| cannot contain embedded zeros.
|
\verb|%s| cannot contain embedded zeros.
|
||||||
|
|
||||||
|
\subsubsection*{\ff \T{string.gfind (s, pat)}}
|
||||||
|
|
||||||
|
% TODO
|
||||||
|
|
||||||
\subsubsection*{\ff \T{string.gsub (s, pat, repl [, n])}}
|
\subsubsection*{\ff \T{string.gsub (s, pat, repl [, n])}}
|
||||||
\DefLIB{string.gsub}
|
\DefLIB{string.gsub}
|
||||||
Returns a copy of \verb|s|
|
Returns a copy of \verb|s|
|
||||||
@ -3410,7 +3420,8 @@ that value is assumed as its size.
|
|||||||
You can call the \verb|table.setn| function to explicitly set
|
You can call the \verb|table.setn| function to explicitly set
|
||||||
the size of a table.
|
the size of a table.
|
||||||
\item implicit size ---
|
\item implicit size ---
|
||||||
%% TODO
|
Otherwise, the size of the object is one less the first integer index
|
||||||
|
with a \nil{} value.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
For more details, see the descriptions of the \verb|table.getn| and
|
For more details, see the descriptions of the \verb|table.getn| and
|
||||||
\verb|table.setn| functions.
|
\verb|table.setn| functions.
|
||||||
@ -3977,9 +3988,9 @@ The program name is stored in index 0,
|
|||||||
the first argument after the program goes to index 1,
|
the first argument after the program goes to index 1,
|
||||||
and so on.
|
and so on.
|
||||||
The field \verb|n| gets the number of arguments after the program name.
|
The field \verb|n| gets the number of arguments after the program name.
|
||||||
Any argument before the program name
|
Any arguments before the program name
|
||||||
(that is, the options plus the interpreter name)
|
(that is, the interpreter name plus the options)
|
||||||
goes to negative indices.
|
go to negative indices.
|
||||||
For instance, in the call
|
For instance, in the call
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
$ lua -la.lua b.lua t1 t2
|
$ lua -la.lua b.lua t1 t2
|
||||||
@ -4020,14 +4031,44 @@ then a more portable solution is \verb|#!/usr/bin/env lua|.)
|
|||||||
%------------------------------------------------------------------------------
|
%------------------------------------------------------------------------------
|
||||||
\section*{Acknowledgments}
|
\section*{Acknowledgments}
|
||||||
|
|
||||||
%% TODO rever isso?
|
The Lua team is grateful to \tecgraf{} for its continued support to Lua.
|
||||||
|
We thank everyone at \tecgraf{},
|
||||||
The authors thank CENPES/PETROBRAS which,
|
specially the head of the group, Marcelo Gattass.
|
||||||
jointly with \tecgraf, used early versions of
|
At the risk of omitting several names,
|
||||||
this system extensively and gave valuable comments.
|
we also thank the following individuals for supporting,
|
||||||
The authors also thank Carlos Henrique Levy,
|
contributing to, and spreading the word about Lua:
|
||||||
who found the name of the game.
|
Alan Watson,
|
||||||
Lua means ``moon'' in Portuguese.
|
Andr\'e Clinio,
|
||||||
|
Andr\'e Costa,
|
||||||
|
Bret Mogilefsky,
|
||||||
|
Cameron Laird,
|
||||||
|
Carlos Cassino,
|
||||||
|
Carlos Henrique Levy,
|
||||||
|
Claudio Terra,
|
||||||
|
David Jeske,
|
||||||
|
Edgar Toernig,
|
||||||
|
Erik Hougaard,
|
||||||
|
Jim Mathies,
|
||||||
|
John Belmonte,
|
||||||
|
John Passaniti,
|
||||||
|
John Roll,
|
||||||
|
Jon Erickson,
|
||||||
|
Jon Kleiser,
|
||||||
|
Mark Ian Barlow,
|
||||||
|
Nick Trout,
|
||||||
|
Noemi Rodriguez,
|
||||||
|
Norman Ramsey,
|
||||||
|
Philippe Lhost,
|
||||||
|
Renata Ratton,
|
||||||
|
Renato Borges,
|
||||||
|
Renato Cerqueira,
|
||||||
|
Reuben Thomas,
|
||||||
|
Stephan Herrmann,
|
||||||
|
Steve Dekorte,
|
||||||
|
Thatcher Ulrich,
|
||||||
|
Tom\'as Gorham,
|
||||||
|
Vincent Penquerc'h.
|
||||||
|
Thank you!
|
||||||
|
|
||||||
|
|
||||||
\appendix
|
\appendix
|
||||||
@ -4035,12 +4076,6 @@ Lua means ``moon'' in Portuguese.
|
|||||||
\section*{Incompatibilities with Previous Versions}
|
\section*{Incompatibilities with Previous Versions}
|
||||||
\addcontentsline{toc}{section}{Incompatibilities with Previous Versions}
|
\addcontentsline{toc}{section}{Incompatibilities with Previous Versions}
|
||||||
|
|
||||||
We took a great care to avoid incompatibilities with
|
|
||||||
the previous public versions of Lua,
|
|
||||||
but some differences had to be introduced.
|
|
||||||
Here is a list of all these incompatibilities.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection*{Incompatibilities with \Index{version 4.0}}
|
\subsection*{Incompatibilities with \Index{version 4.0}}
|
||||||
|
|
||||||
\subsubsection*{Changes in the Language}
|
\subsubsection*{Changes in the Language}
|
||||||
@ -4068,6 +4103,14 @@ this newline is ignored.
|
|||||||
\subsubsection*{Changes in the Libraries}
|
\subsubsection*{Changes in the Libraries}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
|
||||||
|
\item
|
||||||
|
Most library functions now are defined inside tables.
|
||||||
|
There is a compatibility script (\verb|compat.lua|) that
|
||||||
|
redefine most of them as global names.
|
||||||
|
|
||||||
|
\item
|
||||||
|
\verb|dofile| do not handle errors, but simply propagate them.
|
||||||
|
|
||||||
\item
|
\item
|
||||||
The \verb|read| option \verb|*w| is obsolete.
|
The \verb|read| option \verb|*w| is obsolete.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user