Rozszerzając bibliotekę lhf's correct answer, do celów produkcyjnych preferowana jest biblioteka io
.
Funkcja print
w bibliotece podstawowej jest zaimplementowana jako funkcja pierwotna. Pozwala na szybkie i brudne skrypty, które obliczają coś i drukują odpowiedź, z niewielką kontrolą nad jej prezentacją. Jego główne zalety polegają na tym, że wymusza on wszystkie argumenty pod adresem string
i oddziela każdy argument na wyjściu za pomocą zakładek i dostarcza znak nowej linii.
Korzyści te szybko stają się wadami, gdy wymagana jest szczegółowa kontrola wydajności. W tym celu naprawdę musisz użyć io.write
. Jeśli miksujesz print
i io.write
w tym samym programie, możesz potknąć się o kolejną wadę. print
jawnie używa uchwytu pliku C stdout
. Oznacza to, że jeśli zmienisz uchwyt pliku wyjściowego na io.output
, io.write
zrobi to, czego oczekujesz, ale print
nie będzie.
Dobrym kompromisem może być wdrożenie zamiennika dla print
pod względem io.write
. Może to wyglądać tak proste, jak to nietestowanego próbki, gdzie starałem się pisać wyraźnie, zamiast optymalnie i nadal obsługiwać nil
argumentów „prawidłowo”:
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
Po realizują własną wersję print
, to można kusząc, aby poprawić go w inny sposób dla twojej aplikacji. Używanie czegoś z większą kontrolą formatowania niż oferowana przez tostring()
jest dobrym pomysłem. Innym rozważa się separator inny niż znak tabulacji.
To jest * Lua *, a nie * LUA *. – lhf