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".
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
.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
.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.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).require
signals an error.package.cpath
require
to search for a C loader.package.cpath
in the same way it initializes the Lua path package.path
,
using the environment variable LUA_CPATH
(plus another default path).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.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 .package.path
require
to search for a Lua loader.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.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"
foo
will try to load the files ./foo.lua
, ./foo.lc
, and /usr/local/foo/init.lua
, in that order.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
.
|