parrotcode: Lua Package Library | |
Contents | Language Implementations | Lua |
lib/luapackage.pir - Lua Package Library
The package library provides basic facilities for loading and building modules in Lua.
It exports two of its functions directly in the global environment: require
and module
.
Everything else is exported in a table package
.
See "Lua 5.1 Reference Manual", section 5.3 "Modules", http://www.lua.org/manual/5.1/manual.html#5.3.
module (name [, ...])
package.loaded[name]
,
this table is the module.
Otherwise,
if there is a global table t
with the given name,
this table is the module.
Otherwise creates a new table t
and sets it as the value of the global name
and the value of package.loaded[name]
.
This function also initializes t._NAME
with the given name,
t._M
with the module (t
itself),
and t._PACKAGE
with the package name (the full module name minus last component; see below).
Finally,
module
sets t
as the new environment of the current function and the new value of package.loaded[name]
,
so that require
returns t
.If name
is a compound name (that is,
one with components separated by dots),
module
creates (or reuses,
if they already exist) tables for each component.
For instance,
if name
is a.b.c
,
then module
stores the module table in field c
of field b
of global a
.This function may receive optional options after the module name,
where each option is a function to be applied over the module.
require (modname)
package.loaded
to determine whether modname
is already loaded.
If it is,
then require
returns the value stored at package.loaded[modname]
.
Otherwise,
it tries to find a loader for the module.To find a loader,
first require
queries package.preload[modname]
.
If it has a value,
this value (which should be a function) is the loader.
Otherwise require
searches for a Lua loader using the path stored in package.path
.
If that also fails,
it searches for a C loader using the path stored in package.cpath
.
If that also fails,
it tries an all-in-one loader (see below).If there is any error loading or running the module,
or if it cannot find any loader for the module,
then require
signals an error.
package.cpath
require
to search for a C loader.Lua initializes the C path package.cpath
in the same way it initializes the Lua path package.path
,
using the environment variable LUA_CPATH
(plus another default path).NOT USED (see package.pbcpath).
package.loaded
require
to control which modules are already loaded.
When you require a module modname
and package.loaded[modname]
is not false,
require
simply returns the value stored there.
package.loadlib (libname, funcname)
libname
.
Inside this library,
looks for a function funcname
and returns this function as a C function.This is a low-level function.
It completely bypasses the package and module system.
Unlike require
,
it does not perform any path searching and does not automatically adds extensions.
libname
must be the complete file name of the C library,
including if necessary a path and extension.
funcname
must be the exact name exported by the C library .NOT YET IMPLEMENTED.
package.path
require
to search for a Lua loader.At start-up,
Lua initializes this variable with the value of the environment variable LUA_PATH
or with a default path,
if the environment variable is not defined.
Any ";;"
in the value of the environment variable is replaced by the default path.A path is a sequence of templates separated by semicolons.
For each template,
require
will change each interrogation mark in the template by filename
,
which is modname
with each dot replaced by a "directory separator"
(such as "/"
in Unix); then it will try to load the resulting file name.
So,
for instance,
if the Lua path is
"./?.lua;./?.lc;/usr/local/?/init.lua"the search for a Lua loader for module
foo
will try to load the files ./foo.lua
, ./foo.lc
, and /usr/local/foo/init.lua
, in that order.STILL INCOMPLETE (see default).
package.pbcpath
require
to search for a PBC loader.STILL INCOMPLETE (see default).
package.preload
require
).
package.seeall (module)
module
with its __index
field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to function module
.
|