Recherche…


Remarques

Le schéma de base pour écrire un module est de remplir une table avec des clés qui sont des noms de fonctions et des valeurs qui sont les fonctions elles-mêmes. Le module renvoie alors cette fonction pour que le code appelant soit require et utilisé. (Les fonctions sont des valeurs de première classe dans Lua. Le stockage d'une fonction dans une table est donc simple et courant.) La table peut également contenir des constantes importantes sous forme de chaînes ou de nombres.

Ecrire le module

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

Une approche alternative à celle ci-dessus consiste à créer une table de niveau supérieur puis à stocker les fonctions directement dans celle-ci. Dans cet idiome, notre module ci-dessus ressemblerait à ceci:

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

Du point de vue de l'appelant, il y a peu de différence entre les deux styles. (Une différence mérite d'être mentionnée, c'est que le premier style rend plus difficile le monkeypatch du module. Ceci est un pro ou un con, selon votre point de vue. Pour plus de détails à ce sujet, voir ce blog par Enrique García Cota.)

Utiliser le module

-- 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow