用于将文件的前10行读入Lua表的正确代码?

时间:2012-09-30 23:09:11

标签: lua

我只是在学习Lua而我的书( Lua中的编程)中有一些代码“读取文件的前10行:”

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

这对我来说没有任何意义;这不是十个零值吗?有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

简短版本:归结为在您的问题中未列出的代码中是否先前调用了io.input。如果它被调用,它将打印该文件的前10行(下面详细解释)。如果之前未调用它并且您从命令行运行或以交互方式运行,则它将在代码执行后打印您键入控制台的前10行。对于其他情况,它只取决于应用程序的启动方式。

io.read的{​​{3}}参考手册说明如下:

  

io.read(···)

     

相当于io.input():read。

io.input的文档说:

  

使用文件名调用时,它会打开命名文件(在文本模式下),并将其句柄设置为默认输入文件。使用文件句柄调用时,它只是将此文件句柄设置为默认输入文件。当不带参数调用时,它返回当前的默认输入文件。 [...]

file.readfile作为通过调用io.input()返回的对象)的文档说:

  

根据指定的格式读取文件文件,指定要读取的内容。对于每种格式,函数返回带有读取字符的字符串(或数字),如果无法读取具有指定格式的数据,则返回nil。在没有格式的情况下调用时,它使用默认格式来读取整个下一行[...]

所以这里有两种可能性:

    先前使用参数调用了
  • io.input(某些代码未在您的问题中显示),设置默认输入文件。调用没有参数的io.read将返回该输入文件的“默认格式”,即“整个下一行”。
  • io.input先前使用参数而不是调用(如果没有其他代码,则在您的情况下为true)。如果没有参数调用io.read将返回标准输入的“整个下一行”,例如,如果程序从命令行运行,则返回用户的命令行输入。

在第一种情况下,nil将在读完文件的所有行后由io.read()返回。这可能意味着有10个nil实例被读取,但这取决于文件。

在第二种情况下,如果标准输入用尽,将返回nil,这可能会以不同的方式发生,具体取决于应用的启动方式。这也可能意味着10个nil个实例。