Lua
Escribir y utilizar módulos.
Buscar..
Observaciones
El patrón básico para escribir un módulo es llenar una tabla con claves que son nombres de funciones y valores que son las funciones en sí mismas. El módulo luego devuelve esta función para que el código de llamada require
y use. (Las funciones son valores de primera clase en Lua, por lo que almacenar una función en una tabla es fácil y común). La tabla también puede contener cualquier constante importante en forma de, digamos, cadenas o números.
Escribiendo el modulo
--- trim: a string-trimming module for Lua
-- Author, date, perhaps a nice license too
--
-- The code here is taken or adapted from material in
-- Programming in Lua, 3rd ed., Roberto Ierusalimschy
-- trim_all(string) => return string with white space trimmed on both sides
local trim_all = function (s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
-- trim_left(string) => return string with white space trimmed on left side only
local trim_left = function (s)
return (string.gsub(s, "^%s*(.*)$", "%1"))
end
-- trim_right(string) => return string with white space trimmed on right side only
local trim_right = function (s)
return (string.gsub(s, "^(.-)%s*$", "%1"))
end
-- Return a table containing the functions created by this module
return {
trim_all = trim_all,
trim_left = trim_left,
trim_right = trim_right
}
Un enfoque alternativo al anterior es crear una tabla de nivel superior y luego almacenar las funciones directamente en ella. En ese idioma, nuestro módulo anterior se vería así:
-- A conventional name for the table that will hold our functions
local M = {}
-- M.trim_all(string) => return string with white space trimmed on both sides
function M.trim_all(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
-- M.trim_left(string) => return string with white space trimmed on left side only
function M.trim_left(s)
return (string.gsub(s, "^%s*(.*)$", "%1"))
end
-- trim_right(string) => return string with white space trimmed on right side only
function M.trim_right(s)
return (string.gsub(s, "^(.-)%s*$", "%1"))
end
return M
Desde el punto de vista de la persona que llama, hay poca diferencia entre los dos estilos. (Una diferencia que vale la pena mencionar es que el primer estilo hace que sea más difícil para los usuarios programar el módulo. Esto es un profesional o una estafa, según su punto de vista. Para obtener más detalles sobre esto, consulte esta publicación del blog de Enrique García Cota.
Usando el modulo
-- The following assumes that trim module is installed or in the caller's package.path,
-- which is a built-in variable that Lua uses to determine where to look for modules.
local trim = require "trim"
local msg = " Hello, world! "
local cleaned = trim.trim_all(msg)
local cleaned_right = trim.trim_right(msg)
local cleaned_left = trim.trim_left(msg)
-- It's also easy to alias functions to shorter names.
local trimr = trim.trim_right
local triml = trim.trim_left