Ricerca…


Osservazioni

Lo schema di base per scrivere un modulo è riempire una tabella con chiavi che sono nomi di funzioni e valori che sono le stesse funzioni. Il modulo restituisce quindi questa funzione per chiamare il codice da require e utilizzare. (Le funzioni sono valori di prima classe in Lua, quindi l'archiviazione di una funzione in una tabella è semplice e comune.) La tabella può contenere anche costanti importanti sotto forma di, per esempio, stringhe o numeri.

Scrivere il 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 approccio alternativo a quello sopra è quello di creare una tabella di livello superiore e quindi memorizzare le funzioni direttamente in essa. In quell'idioma, il nostro modulo in alto sarebbe simile a questo:

-- 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

Dal punto di vista del chiamante, c'è poca differenza tra i due stili. (Una differenza che vale la pena menzionare è che il primo stile rende più difficile per gli utenti la monkeypatch del modulo.Questo è un pro o un contro, a seconda del tuo punto di vista.Per maggiori dettagli su questo, vedi questo post del blog di Enrique García Cota.)

Usando il 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow