Lua打印在同一行

Ale*_*ack 33 lua

在Pascal,我有writewriteln.显然,Lua printwritelnPascal 类似.我们有类似writePascal的东西吗?连续打印命令如何将其输出发送到同一行?

print("Hello")
print("World")
Run Code Online (Sandbox Code Playgroud)

输出:

Hello
world
Run Code Online (Sandbox Code Playgroud)

我想要这个:

Hello world
Run Code Online (Sandbox Code Playgroud)

lhf*_*lhf 71

使用io.write替代print,这意味着简单的用途,如调试,无论如何.

  • 好吧,这就是为什么@lhf是Lua语言的创造者之一.:) (7认同)

RBe*_*eig 21

扩展lhf的正确答案,该io库是生产使用的首选.

print基本库中的函数实现为基本功能.它允许快速和脏的脚本计算某些东西并打印答案,几乎无法控制其演示.它的主要优点是它强制所有参数,string并且它将输出中的每个参数与制表符分开并提供换行符.

当需要对输出进行详细控制时,这些优点很快就会成为缺陷.为此,你真的需要使用io.write.如果你混合printio.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
Run Code Online (Sandbox Code Playgroud)

一旦您实现自己的版本print,那么它可能很容易以其他方式为您的应用程序改进它.使用比提供的更多格式控制的东西tostring()是一个好主意.另一个是考虑除制表符之外的分隔符.

  • 这也可以写成`function print(...)io.write(table.concat({...},"\ t"),"\n")end`,代价是创建一个表并执行串联. (3认同)
  • 但是,只有当所有参数都是字符串或数字时,因为[`table.concat`](http://www.lua.org/source/5.1/ltablib.c.html#tconcat)在每个元素上调用`lua_isstring()`表...与基本库`print`相比,它在传递的每个参数上调用`tostring`. (2认同)

syl*_*aar 8

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

您可能无法始终访问该io库.

  • 因为您可能处于嵌入式环境或其他一些重新定义`print`的受限环境中.以魔兽世界为例. (8认同)

小智 6

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

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

print(h..w)
Run Code Online (Sandbox Code Playgroud)

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