Lua 打印在同一行

Posted

技术标签:

【中文标题】Lua 打印在同一行【英文标题】:Lua print on the same line 【发布时间】:2011-11-01 04:44:26 【问题描述】:

在 Pascal 中,我有 writewriteln。显然 Lua 的 print 类似于 Pascal 的 writeln。我们有类似 Pascal 的write 的东西吗?连续的打印命令如何将它们的输出发送到同一行?

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

输出:

Hello
world

我想要这个:

Hello world

【问题讨论】:

它是 Lua,而不是 LUA 【参考方案1】:

使用io.write 而不是print,这意味着简单的用途,例如调试,无论如何。

【讨论】:

嗯,这就是为什么@lhf 是 Lua 语言的创造者之一。 :)【参考方案2】:

在lhf's correct answer 的基础上扩展,io 库更适合生产使用。

基础库中的print 函数作为原始功能实现。它允许快速而肮脏的脚本计算某些东西并打印答案,而几乎无法控制其呈现。它的主要优点是它将所有参数强制转换为string,并用制表符分隔输出中的每个参数并提供换行符。

当需要对输出进行详细控制时,这些优势很快就会变成缺陷。为此,您确实需要使用io.write。如果您在同一个程序中混合使用printio.write,您可能会遇到另一个缺陷。 print 显式使用 C stdout 文件句柄。这意味着如果您使用io.output 更改输出文件句柄,io.write 将执行您所期望的操作,但 print 不会。

一个好的折衷办法是用io.write 替换print。它可能看起来像这个未经测试的示例一样简单,我试图清楚地而不是优化地编写并且仍然“正确”处理 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() 提供更多格式控制的东西是一个好主意。另一个正在考虑使用制表符以外的分隔符。

【讨论】:

这也可以写成function print(...) io.write(table.concat(...,"\t"),"\n") end,代价是创建一个表并执行一个连接。 但前提是所有参数都是字符串或数字,因为table.concat 在表的每个元素上调用lua_isstring()...与基础库print 相比,它在每个元素上调用tostring参数传递。 @Rberteig:你为什么使用 select("#",...) 而不仅仅是#arg? arg 表是 Lua 5.0 的一个特性,在 5.1 中存在但已弃用,它仅在函数中引用时才存在。引用它会导致创建一个新表,因为... 是一个非常特殊的值,它不是表。此外,select('#',...) 得到正确的长度,即使某些参数是 nil#arg 可能不是。【参考方案3】:

作为替代方案,只需构建您的字符串,然后使用单个 print 将其写出来

您可能无法始终访问io 库。

【讨论】:

如果您无权访问io 库,为什么还要访问print 因为您可能处于嵌入式环境,或其他重新定义print 的受限环境中。以魔兽世界为例。 感谢您的回答。很容易忘记这种方法的存在。【参考方案4】:

您可以为“Hello”和“World”使用变量。然后稍后将它们连接起来。像这样:

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

print(h..w)

在这种情况下,它将显示为“HelloWorld”。但这很容易解决。希望这有帮助!

【讨论】:

【参考方案5】:

添加到@Searous 的答案,尝试以下操作。

本地 h = "你好" 本地 w = "世界"

打印(h.." "..w)

您可以将两者连接在一起,只需在两个变量之间连接一个空格。

【讨论】:

【参考方案6】:
local h = "Hello"
local w = "World!"

print(h, w)

【讨论】:

以上是关于Lua 打印在同一行的主要内容,如果未能解决你的问题,请参考以下文章

在同一行打印多个值

在同一行操场上打印字符 swift 3 [重复]

如何在同一行打印2个项目[重复]

python 打印在同一行

Logback JsonLayout 在同一行打印所有日志

sh linux使用tr在同一行中打印多行输出