我知道格式
"*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() 调用中检查更多字符串参数。