我只是在学习Lua而我的书( Lua中的编程)中有一些代码“读取文件的前10行:”
a = {}
for i=1,10 do
a[#a+1] = io.read()
end
这对我来说没有任何意义;这不是十个零值吗?有人可以解释一下吗?
答案 0 :(得分:3)
简短版本:归结为在您的问题中未列出的代码中是否先前调用了io.input
。如果它被调用,它将打印该文件的前10行(下面详细解释)。如果之前未调用它并且您从命令行运行或以交互方式运行,则它将在代码执行后打印您键入控制台的前10行。对于其他情况,它只取决于应用程序的启动方式。
io.read
的{{3}}参考手册说明如下:
io.read(···)
相当于io.input():read。
io.input
的文档说:
使用文件名调用时,它会打开命名文件(在文本模式下),并将其句柄设置为默认输入文件。使用文件句柄调用时,它只是将此文件句柄设置为默认输入文件。当不带参数调用时,它返回当前的默认输入文件。 [...]
file.read
(file
作为通过调用io.input()
返回的对象)的文档说:
根据指定的格式读取文件文件,指定要读取的内容。对于每种格式,函数返回带有读取字符的字符串(或数字),如果无法读取具有指定格式的数据,则返回nil。在没有格式的情况下调用时,它使用默认格式来读取整个下一行[...]
所以这里有两种可能性:
io.input
(某些代码未在您的问题中显示),设置默认输入文件。调用没有参数的io.read
将返回该输入文件的“默认格式”,即“整个下一行”。io.input
先前使用参数而不是调用(如果没有其他代码,则在您的情况下为true)。如果没有参数调用io.read
将返回标准输入的“整个下一行”,例如,如果程序从命令行运行,则返回用户的命令行输入。在第一种情况下,nil
将在读完文件的所有行后由io.read()
返回。这可能意味着有10个nil
实例被读取,但这取决于文件。
在第二种情况下,如果标准输入用尽,将返回nil
,这可能会以不同的方式发生,具体取决于应用的启动方式。这也可能意味着10个nil
个实例。