Élargir le champ d'action La bonne réponse de lhf le io
est préférable pour une utilisation en production.
El print
de la bibliothèque de base est implémentée comme une capacité primitive. Elle permet des scripts rapides et sales qui calculent quelque chose et impriment une réponse, avec peu de contrôle sur sa présentation. Ses principaux avantages sont qu'elle contraint tous les arguments à la fonction string
et qu'il sépare chaque argument dans la sortie avec des tabulations et fournit une nouvelle ligne.
Ces avantages deviennent rapidement des défauts lorsqu'un contrôle détaillé de la sortie est nécessaire. Pour cela, vous devez vraiment utiliser io.write
. Si vous mélangez print
y io.write
dans le même programme, vous pourriez trébucher sur un autre défaut. print
utilise le C stdout
explicitement. Cela signifie que si vous utilisez io.output
pour changer l'identifiant du fichier de sortie, io.write
fera ce que vous attendez mais print
ne le fera pas.
Un bon compromis peut consister à mettre en place un remplacement de l'option print
en termes de io.write
. Cela pourrait être aussi simple que cet échantillon non testé où j'ai essayé d'écrire clairement plutôt que de manière optimale et de gérer quand même nil
arguments "correctement" :
local write = io.write
function print(...)
local n = select("#",...)
for i = 1,n do
local v = tostring(select(i,...))
write(v)
if i~=n then write'\t' end
end
write'\n'
end
Une fois que vous aurez mis en place votre propre version de print
il peut être tentant de l'améliorer par d'autres moyens pour votre application. L'utilisation d'un outil permettant un meilleur contrôle de la mise en forme que celui offert par le format tostring()
est une bonne idée. Une autre consiste à envisager un séparateur autre qu'un caractère de tabulation.