Pascalには、write
とwriteln
があります。どうやらLuaのprint
はPascalのwriteln
に似ています。 Pascalのwrite
に似たものはありますか?連続した印刷コマンドはどのようにして同じ行に出力を送信できますか?
print("Hello")
print("World")
出力:
Hello
world
これが欲しい:
Hello world
使用する io.write
代わりにprint
を使用します。これはとにかく、デバッグなどの単純な使用を目的としています。
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()
で提供されるよりも多くのフォーマット制御を備えたものを使用することは、良いアイデアです。別の方法では、タブ文字以外の区切り文字を検討しています。
別の方法として、文字列を作成し、単一のprint
を使用してそれを書き出すだけです。
io
ライブラリに常にアクセスできるとは限りません。
「Hello」と「World」に変数を使用できます。その後、それらを連結します。このような:
local h = "Hello"
local w = "World"
print(h..w)
この場合、「HelloWorld」として表示されます。しかし、それは簡単に修正できます。これが役に立てば幸いです!