Lua
Skriva och använda moduler
Sök…
Anmärkningar
Det grundläggande mönstret för att skriva en modul är att fylla en tabell med nycklar som är funktionsnamn och värden som är själva funktionerna. Modulen returnerar sedan den här funktionen för att ringa kod att require
och använda. (Funktioner är förstklassiga värden i Lua, så att lagra en funktion i en tabell är enkelt och vanligt.) Tabellen kan också innehålla alla viktiga konstanter i form av, till exempel, strängar eller siffror.
Skriva modulen
--- 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
}
Ett alternativt tillvägagångssätt till det ovanstående är att skapa en översta tabell och sedan lagra funktionerna direkt i den. I det formspråket skulle vår modul ovan se ut så här:
-- 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
Från den som ringer är det liten skillnad mellan de två stilarna. (En skillnad som är värd att nämna är att den första stilen gör det svårare för användare att monkepatcha modulen. Detta är antingen en proffs eller en nackdel, beroende på din synvinkel. För mer information om detta, se detta blogginlägg av Enrique García Cota.)
Med hjälp av modulen
-- 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