En Pascal, j'ai write
et writeln
. Apparemment, le print
de Lua est similaire au writeln
de Pascal. Avons-nous quelque chose de similaire à write
de Pascal? Comment les commandes d'impression consécutives peuvent-elles envoyer leur sortie sur la même ligne?
print("Hello")
print("World")
Production:
Hello
world
Je veux avoir ceci:
Hello world
Utilisation io.write
à la place print
, qui est de toute façon destiné à des utilisations simples, comme le débogage.
Développé sur réponse correcte de lhf , la bibliothèque io
est préférée pour une utilisation en production.
La fonction print
dans la bibliothèque de base est implémentée comme une capacité primitive. Il 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'il contraint tous les arguments à 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 requis. Pour cela, vous devez vraiment utiliser io.write
. Si vous mélangez print
et io.write
Dans le même programme, vous pourriez trébucher sur un autre défaut. print
utilise explicitement le descripteur de fichier C stdout
. Cela signifie que si vous utilisez io.output
Pour modifier le descripteur du fichier de sortie, io.write
Fera ce que vous attendez mais pas print
.
Un bon compromis peut être d'implémenter un remplacement de print
en termes de io.write
. Cela pourrait sembler aussi simple que cet exemple non testé où j'ai essayé d'écrire clairement plutôt qu'optimalement et de toujours gérer les arguments nil
"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 implémentez votre propre version de print
, il peut être tentant de l'améliorer par d'autres moyens pour votre application. Utiliser quelque chose avec plus de contrôle de formatage que celui offert par tostring()
est une bonne idée. Un autre envisage un séparateur autre qu'un caractère de tabulation.
Comme alternative, créez simplement votre chaîne puis écrivez-la avec un seul print
Il se peut que vous n'ayez pas toujours accès à la bibliothèque io
.
Vous pouvez utiliser des variables pour "Bonjour" et "Monde". Ensuite, concaténez-les plus tard. Comme ça:
local h = "Hello"
local w = "World"
print(h..w)
Il sera affiché, dans ce cas, comme "HelloWorld". Mais c'est facile à réparer. J'espère que cela vous a aidé!