Créer ses propres librairies

Première version

Créez un fichier nommé mymodule.lua, puis ajoutez le code suivant :

1
2
3
4
5
6
7
local mymodule = {}

function mymodule.foo()
  print("Hello world!")
end

return mymodule

Pour utiliser cette bibliothèque dans un autre fichier, il suffit de l’importer avec require :

1
2
3
4
5
monModule = require "mymodule"
monModule.foo()

-- output :
--  Hello world!

Si votre module est situé dans un ou plusieurs sous-répertoires, utilisez la notation par points :

1
2
3
4
5
monModule = require "monRep.unAutreRep.mymodule"
monModule.foo()

-- output :
--  Hello world!

🔹 En Lua, le séparateur pour require est un . et non / ou \.

Exemple complet

Fichier : fmt/printf.lua

1
2
3
4
5
6
7
local fmt = {}

function fmt.printf(str, ...)
  io.write(string.format(str, ...))
end

return fmt

Fichier utilisateur :

1
2
3
4
5
6
7
local fmt = require "fmt.printf"

local name = "Julien"
fmt.printf("Bonjour %s", name)

-- output :
--  Bonjour Julien

Deuxième version (fonction directe)

C’est une forme plus directe, que certains préfèrent, car elle évite de préfixer les appels avec un nom de module. Elle est souvent plus concise.

Exemple complet

Fichier : fileExists.lua

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
local function fileExists(filename)
  local f = io.open(filename, 'r')
  if f ~= nil then
    io.close(f)
    return true
  else
    return false
  end
end

return fileExists

Fichier utilisateur : test.lua

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
local fileExists = require("fileExists")

local response = fileExists("fileExists.lua")
print(response)

response = fileExists("fichier_qui_nexiste_pas.lua")
print(response)

-- output :
--  true
--  false

Les deux méthodes sont valables : utilisez celle qui vous semble la plus adaptée à votre projet.