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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow