1

私はLuaを学んでいるところですが、私の本(Programming in Lua)には、「ファイルの最初の10行を読み取る」というコードが少し含まれています。

a = {}
for i=1,10 do
    a[#a+1] = io.read()
end

これは私にはまったく意味がありません。これは10個のnil値を読み取りませんか?誰かがこれを説明してもらえますか?

4

1 に答える 1

3

短いバージョン:io.input質問に記載されていないコードで以前に呼び出されたかどうかに要約されます。呼び出された場合は、そのファイルの最初の 10 行を出力します (以下で詳しく説明します)。以前に呼び出されておらず、コマンド ラインまたは対話形式で実行している場合、そのコードが実行されると、コンソールに入力した最初の 10 行が出力されます。それ以外の場合は、アプリの起動方法によって異なります。

Lua 5.1リファレンス マニュアルにio.readは、次のように記載されています。

io.read (···)

io.input():read と同等です。

そして、ドキュメントにio.inputは次のように書かれています:

ファイル名で呼び出されると、指定されたファイルを (テキスト モードで) 開き、そのハンドルをデフォルトの入力ファイルとして設定します。ファイル ハンドルを指定して呼び出すと、このファイル ハンドルがデフォルトの入力ファイルとして設定されます。パラメータなしで呼び出すと、現在のデフォルトの入力ファイルが返されます。[...]

そしてfile.read(fileの呼び出しによって返されるオブジェクトであるio.input()) のドキュメントには、次のように書かれています。

何を読み取るかを指定する指定された形式に従って、ファイルfileを読み取ります。フォーマットごとに、関数は読み取った文字を含む文字列 (または数値) を返します。指定されたフォーマットでデータを読み取れない場合は nil を返します。フォーマットなしで呼び出すと、次の行全体を読み取るデフォルトのフォーマットが使用されます [...]

したがって、ここには 2 つの可能性があります。

  • io.inputパラメータ(質問には表示されていないコード)を使用して以前に呼び出され、デフォルトの入力ファイルを設定しました。パラメータなしで を呼び出すとio.read、その入力ファイルの「デフォルト形式」、つまり「次の行全体」が返されます。
  • io.inputパラメータを使用して以前に呼び出されていません(追加のコードがない場合、これはあなたの場合に当てはまります)。パラメータなしで を呼び出すとio.read、標準入力の「次の行全体」が返されます。たとえば、プログラムがコマンド ラインから実行されている場合は、ユーザーのコマンド ライン入力が返されます。

最初のケースでは、ファイルのすべての行の読み取りが終了した後にnil返されます。io.read()これは get read の 10 回のインスタンスを意味する可能性がnilありますが、ファイルによって異なります。

2 番目のケースでnilは、標準入力が使い尽くされた場合に返されます。これは、アプリの起動方法に応じてさまざまな方法で発生する可能性があります。これも、 の 10 インスタンスを意味する可能性がありますnil

于 2012-09-30T23:50:20.217 に答える