Луа печать на той же строке - PullRequest
31 голосов
/ 22 августа 2011

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

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

Выход:

Hello
world

Я хочу получить это:

Hello world

Ответы [ 5 ]

68 голосов
/ 22 августа 2011

Используйте io.write вместо print, что в любом случае предназначено для простых целей, таких как отладка.

21 голосов
/ 23 августа 2011

Если развернуть lhf правильный ответ , библиотека io предпочтительна для производственного использования.

Функция print в базовой библиотеке реализована как примитивная возможность. Он позволяет создавать быстрые и грязные сценарии, которые что-то вычисляют и печатают ответ, практически не контролируя его представление. Его основные преимущества заключаются в том, что он приводит все аргументы к string и разделяет каждый аргумент в выводе с помощью табуляций и предоставляет новую строку.

Эти преимущества быстро становятся дефектами, когда требуется детальный контроль над выходом. Для этого вам действительно нужно использовать io.write. Если вы смешаете print и io.write в одной программе, вы можете отключиться из-за другого дефекта. print явно использует дескриптор файла C 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(), является хорошей идеей. Другой рассматривает разделитель, отличный от символа табуляции.

6 голосов
/ 22 августа 2011

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

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

4 голосов
/ 20 января 2015

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

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

print(h..w)

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

0 голосов
/ 19 сентября 2014

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

print ("hello world")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...