我知道 format"*a"
是用来读取整个文件的,"*l"
用来读取一行。但是"*all"
(在《Lua 编程》一书中)是什么意思呢?我也在"*line"
一些网页上看到过。
Lua 参考仅指定了那些单字符格式,并没有提及更长的格式。
一开始我以为,包含多个字符的格式意味着要单独读取每个格式,比如"*nn"
会读取两个数字,"*ll"
会读取两行。但事实似乎并非如此。
我发现的唯一关于此事的地方是Reddit 上的一条评论
但是“umber”是噪音字符串。您依赖 file.read 的实现来忽略星号格式的第二个字符之后的格式说明符中的所有字符。如果这种情况发生变化怎么办?
"*all"
那么等等的正确行为是什么,或者它是否真的被定义了?
ps:我使用的是Lua 5.3,但我检查过的其他版本的相关参考是相同的。
Lua 不会检查整个单词。它只测试可选星号后面的第一个符号。
如果您查看 lua 源代码(
liolib.c
包含io
库函数的文件),您会发现如果存在第一个*
符号,则会跳过它,它仅用于与旧版本兼容。然后测试它后面的第一个字母,以确定它是数字的“n”,行的“l”,行尾的“L”,以及整个文件的“a”。它不关心该字符串中是否有其他字母,您可以编写任何更易读的字母 - 只要第一个字母在该列表中 - 它就可以工作。但是,如果您需要多次读取,它将在 read() 调用中检查更多字符串参数。