Lua печатает на той же линии

В Паскале, я write и writeln. Очевидно, Lua print похож на writeln Паскаля. У нас есть что-то подобное write Паскаля? Как последовательные команды печати отправляют свой вывод в одну строку?

print("Hello")
print("World")

Вывод:

Hello
world

Я хочу иметь это:

Hello world

Ответ 1

io.write этого используйте io.write print, который предназначен для простого использования, например, для отладки.

Ответ 2

Расширяясь на правильном ответе 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() - одна хорошая идея. Другой рассматривает разделитель, отличный от символа табуляции.

Ответ 3

В качестве альтернативы просто создайте свою строку, затем запишите ее с помощью одной print

У вас может не всегда быть доступ к библиотеке io.

Ответ 4

Вы можете использовать переменные для "Hello" и "World". Затем конкатенируйте их позже. Как это:

local h = "Hello"
local w = "World"

print(h..w)

В этом случае он будет отображаться как "HelloWorld". Но это легко исправить. Надеюсь, это помогло!

Ответ 5

Проблема, которую я нахожу при использовании 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 добавляет дополнительный код.

Ответ 6

Если вы хотите использовать печать, вы сделали бы это

печать ("привет мир")

Все, находящееся между ними, будет напечатано