Latest web development tutorials

embalaje del módulo de Lua

Módulo es similar a un paquete de biblioteca, a partir de Lua 5.1, Lua añadió mecanismo de gestión de módulos estándar, se puede poner un poco de código común en un archivo, en forma de llamadas de interfaz API en otros lugares, a favor de la reutilización de código y reducir acoplamiento Código.

módulo de Lua es la tabla de las variables, funciones y otros elementos conocidos, creando así un módulo muy simple, es crear una tabla, a continuación, la necesidad de exportar las constantes, funciones en las que, finalmente, regresó a la mesa en la línea. La siguiente es la creación de un módulo personalizado module.lua, formato de código de archivo es la siguiente:

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
 
-- 定义一个常量
module.constant = "这是一个常量"
 
-- 定义一个函数
function module.func1()
    io.write("这是一个公有函数!\n")
end
 
local function func2()
    print("这是一个私有函数!")
end
 
function module.func3()
    func2()
end
 
return module

A partir de lo anterior, la estructura del módulo es una estructura de la tabla, por lo que se puede llamar a la mesa como un elemento en la operación para operar como una constante en el módulo de llamadas o función.

El func2 anteriormente declarados como variables locales bloquean, lo que significa una función privada, y por lo tanto no se puede acceder desde el exterior del módulo de función privada debe ser llamado por el módulo de función pública.


requerir la función

Lua proporciona una función llamada require se utiliza para cargar los módulos. Para cargar un módulo, simplemente llamarlo. Por ejemplo:

require("<模块名>")

o

require "<模块名>"

Devolverá después de la ejecución requiere una constante o una función por un módulo que consta de mesa, y definirá una variable global que contiene la tabla.

-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")
 
print(module.constant)
 
module.func3()

El código de seguridad se ejecuta como resultado de:

这是一个常量
这是一个私有函数!

O para cargar los módulos definen una variable alias, llamada fácil:

-- test_module2.lua 文件
-- module 模块为上文提到到 module.lua
-- 别名变量 m
local m = require("module")
 
print(m.constant)
 
m.func3()

El código de seguridad se ejecuta como resultado de:

这是一个常量
这是一个私有函数!

mecanismo de carga

Para los módulos personalizados, no en lo que hará directorio de archivos, requerir función tiene su propia estrategia de ruta del archivo de carga, intenta cargar el archivo de módulo de biblioteca de programas Lua o C.

Requerir ruta de búsqueda de archivo de Lua se almacena en la variable global package.path, después de que arranque Lua, LUA_PATH valor inicial de la variable de entorno para la variable de entorno. Si no encuentra la variable de entorno, la ruta predeterminada definida por una inicialización en tiempo de compilación.

Por supuesto, si no hay LUA_PATH esta variable de entorno, también puede personalizar la configuración, abierta en el archivo .profile el directorio personal del usuario actual (que no crea, también puede abrir el archivo .bashrc), por ejemplo, la ruta "~ / lua /" para unirse entorno LUA_PATH variables:

#LUA_PATH
export LUA_PATH="~/lua/?.lua;;"

ruta del archivo ";" separado por los dos finales ";;" se refiere a la recién añadida además de la ruta original de la ruta predeterminada.

A continuación, actualizar los parámetros de variables de entorno para tener efecto inmediatamente.

source ~/.profile

A continuación, los valores asumidos package.path son:

/Users/dengjoe/lua/?.lua;./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua

Así que cuando se llama a require ( "módulo") intentará abrir los siguientes directorios de archivos para buscar objetivos.

/Users/dengjoe/lua/module.lua;
./module.lua
/usr/local/share/lua/5.1/module.lua
/usr/local/share/lua/5.1/module/init.lua
/usr/local/lib/lua/5.1/module.lua
/usr/local/lib/lua/5.1/module/init.lua

Si se aborda el archivo de destino se llamará package.loadfile para cargar los módulos. De lo contrario, ir a librerías C.

ruta de búsqueda de archivos es package.cpath obtenido a partir de una variable global, y esta variable es LUA_CPATH a las variables de entorno iniciales.

Estrategia de búsqueda con el mismo que el anterior, pero ahora la búsqueda se sustituye de manera o tipo de archivo DLL. Si lo encuentra, entonces se requerirá por package.loadlib para cargarlo.


C paquete

Lua y C son fáciles de combinar con la tecla C para escribir paquete de Lua.

Escribe un paquete diferente y Lua, C paquete antes de usarlo por primera debe estar cargado y conectado, en la mayoría de los sistemas es la forma más fácil de lograr mecanismos librería de enlace dinámico.

Lua proporciona toda la funcionalidad de la vinculación dinámica en una función llamada loadlib. Esta función toma dos argumentos: la ruta absoluta a la biblioteca y la inicialización de la función. Así, un ejemplo de una llamada típica es:

local path = "/usr/local/lua/lib/libluasocket.so"
local f = loadlib(path, "luaopen_socket")

función loadlib carga la biblioteca especificada y conectado con Lua, pero no se abre la biblioteca (es decir, sin función de llamada de inicialización), de lo contrario, devuelve la función de inicialización en función Lua, por lo que nosotros le podemos llamar directamente en Lua.

Si el error se produjo durante la carga de una biblioteca dinámica o inicialización función de búsqueda, loadlib devuelve mensajes de error y nil. Podemos modificar la sección anterior de código para detectar errores y luego llamar a la función de inicialización:

local path = "/usr/local/lua/lib/libluasocket.so"
-- 或者 path = "C:\\windows\\luasocket.dll",这是 Window 平台下
local f = assert(loadlib(path, "luaopen_socket"))
f()  -- 真正打开库

En circunstancias normales, se espera que la liberación de la biblioteca binaria contiene un archivo apéndice similares fragmento de código anterior, los binarios de instalación se pueden colocar fácilmente en un directorio, sólo es necesario modificar el archivo de biblioteca de código auxiliar binario corresponde a la ruta real.

El directorio en el que se añadió el archivo en el talón de LUA_PATH, esta configuración se puede utilizar después de cargar la biblioteca C funciones requieren el.