Lua
Module schreiben und verwenden
Suche…
Bemerkungen
Das grundlegende Muster zum Schreiben eines Moduls besteht darin, eine Tabelle mit Schlüsseln zu füllen, die Funktionsnamen und Werte sind, die die Funktionen selbst sind. Das Modul gibt dann diese Funktion zurück, damit der Code require
und verwendet werden kann. (Funktionen sind erstklassige Werte in Lua. Daher ist das Speichern einer Funktion in einer Tabelle einfach und gebräuchlich.) Die Tabelle kann auch wichtige Konstanten in Form von Zeichenfolgen oder Zahlen enthalten.
Modul schreiben
--- 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
}
Ein alternativer Ansatz zu dem obigen Ansatz besteht darin, eine Tabelle auf oberster Ebene zu erstellen und die Funktionen direkt in dieser zu speichern. In dieser Sprache würde unser Modul so aussehen:
-- 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
Aus der Sicht des Anrufers gibt es wenig Unterschiede zwischen den beiden Stilen. (Ein bemerkenswerter Unterschied ist, dass der erste Stil es für Benutzer schwieriger macht, das Modul zu überwachen. Dies ist je nach Standpunkt entweder ein Profi oder ein Betrüger. Weitere Informationen hierzu finden Sie in diesem Blogbeitrag von Enrique García.) Cota.)
Verwendung des Moduls
-- 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