Ответ 1
io.write
этого используйте io.write
print
, который предназначен для простого использования, например, для отладки.
В Паскале, я write
и writeln
. Очевидно, Lua print
похож на writeln
Паскаля. У нас есть что-то подобное write
Паскаля? Как последовательные команды печати отправляют свой вывод в одну строку?
print("Hello")
print("World")
Вывод:
Hello
world
Я хочу иметь это:
Hello world
io.write
этого используйте io.write
print
, который предназначен для простого использования, например, для отладки.
Расширяясь на правильном ответе lhf, библиотека io
предпочтительнее для использования в производстве.
Функция print
в базовой библиотеке реализована как примитивная возможность. Это позволяет использовать быстрые и грязные скрипты, которые что-то вычисляют и печатают ответ, без какого-либо контроля над его представлением. Его основные преимущества заключаются в том, что он принуждает все аргументы к string
и разделяет каждый аргумент на выходе с вкладками и поставляет новую string
.
Эти преимущества быстро становятся дефектами, когда требуется подробный контроль за выходом. Для этого вам действительно нужно использовать io.write
. Если вы смешиваете print
и io.write
в одной и той же программе, вы можете отключить другой дефект. print
явно использует дескриптор файла stdout
. Это означает, что если вы используете io.output
для изменения дескриптора выходного файла, io.write
сделает то, что вы ожидаете, но print
не будет.
Хорошим компромиссом может быть внедрение замены для print
с точки зрения io.write
. Он может выглядеть так же просто, как этот непроверенный образец, где я пытался писать четко, а не оптимально и по-прежнему обрабатывать nil
аргументы "правильно":
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
После того, как вы реализуете свою собственную версию print
, может возникнуть соблазн улучшить ее другим способом для вашего приложения. Использование чего-то большего контроля форматирования, чем предлагаемое tostring()
- одна хорошая идея. Другой рассматривает разделитель, отличный от символа табуляции.
В качестве альтернативы просто создайте свою строку, затем запишите ее с помощью одной print
У вас может не всегда быть доступ к библиотеке io
.
Вы можете использовать переменные для "Hello" и "World". Затем конкатенируйте их позже. Как это:
local h = "Hello"
local w = "World"
print(h..w)
В этом случае он будет отображаться как "HelloWorld". Но это легко исправить. Надеюсь, это помогло!
Проблема, которую я нахожу при использовании io.write over print, заключается в том, что тогда, когда вы хотите создать новую строку, вы должны поместить "\n" в конец вашей строки io.write, например
io.write "hello \n"
io.write "world \n"
что я понял, но я только начал изучать Lua, и это хороший вопрос для меня, есть ли более простой способ сделать io.write, но не использовать \n в конце для новой строки? Я нахожу, что использование print over io.write вызывает некоторые проблемы с арифметикой, переменными и т.д.... когда я добавляю их после печати на одной строке, поэтому предпочитаю использовать io.write, но \n добавляет дополнительный код.
Если вы хотите использовать печать, вы сделали бы это
печать ("привет мир")
Все, находящееся между ними, будет напечатано