在Pascal中,我有write
和writeln
。顯然Lua的print
類似於Pascal的writeln
。我們有類似Pascal的write
嗎?連續的打印命令如何將它們的輸出發送到同一行?Lua在同一行上打印
print("Hello")
print("World")
輸出:
Hello
world
我想有這樣的:
Hello world
在Pascal中,我有write
和writeln
。顯然Lua的print
類似於Pascal的writeln
。我們有類似Pascal的write
嗎?連續的打印命令如何將它們的輸出發送到同一行?Lua在同一行上打印
print("Hello")
print("World")
輸出:
Hello
world
我想有這樣的:
Hello world
使用io.write
代替print
,這意味着簡單的用途,如調試,無論如何。
這是最短的正確答案。 – AlexStack
好吧,這就是爲什麼@lhf是Lua語言的創造者之一。 :) – felipsmartins
作爲替代,只是建立你的字符串,然後將其與一個print
寫出來你可能並不總是有訪問io
庫。
如果您無法訪問'io'庫,您爲什麼可以訪問'print'? –
因爲您可能處於嵌入式環境或重新定義'print'的其他受限環境。例如魔獸世界。 – sylvanaar
擴大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()
更多的格式化控件是一個好主意。另一個是考慮除了製表符以外的分隔符。
如果你想使用的打印你這樣做
打印(「世界你好」)
一切其間的商將得到印刷
你可以使用變量「你好」和「世界」。然後再連接它們。像這樣:
local h = "Hello"
local w = "World"
print(h..w)
在這種情況下,它將顯示爲「HelloWorld」。但這很容易解決。希望這有助於!
我在使用io.write打印時發現的問題是,有時您希望實際創建一個新行,您必須在io.write行的末尾放置「\ n」,例如
io.write "hello \n"
io.write "world \n"
東西,我想通了,但我剛開始學習Lua和這對我來說是一個很好的問題,有更簡單的方法來做到io.write但最終沒有使用\ n作爲一個新的生產線?我發現在io.write上使用print會導致我在算術,變量等方面遇到一些麻煩......當我在同一行打印後添加它們時,我更喜歡使用io.write,但\ n會添加額外的代碼。
它是* Lua *,而不是* LUA *。 – lhf