在Pascal中,我有write
和writeln
。显然,Lua的print
类似于Pascal的writeln
。我们有类似Pascal write
的东西吗?连续打印命令如何将其输出发送到同一行?
print("Hello")
print("World")
输出:
Hello
world
我想要这个:
Hello world
答案 0 :(得分:68)
使用io.write
代替print
,无论如何都是用于简单用途,例如调试。
答案 1 :(得分:21)
扩展lhf's correct answer,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()
提供的更多格式控制的东西是个好主意。另一个是考虑除制表符之外的分隔符。
答案 2 :(得分:6)
作为替代方案,只需构建您的字符串,然后使用单个print
您可能无法始终访问io
库。
答案 3 :(得分:4)
您可以使用" Hello"和"世界"。然后再连接它们。像这样:
local h = "Hello"
local w = "World"
print(h..w)
在这种情况下,它将显示为" HelloWorld"。但这很容易解决。希望这有帮助!
答案 4 :(得分:1)
在@Searous的答案之外,尝试以下操作。
local h =“ hello” 本地w =“世界”
print(h ..“” ..w)
您可以将两个变量串联在一起,只需在两个变量之间串联一个空格即可。
答案 5 :(得分:-5)
如果你想使用这个版本,你可以这样做
print(“hello world”)
商品之间的所有内容都将打印出来