`io.read("*all")`中的"*all"是什么意思?

问题描述 投票:0回答:1

我知道格式

"*a"
用于读取整个文件,
"*l"
用于读取一行。但是
"*all"
(出现在《Lua 编程》一书中)是什么意思呢?我还在一些网页上看到了
"*line"

Lua 参考仅指定了一种字符格式,并没有提及任何更长的格式。

一开始我认为,具有多个字符的格式意味着单独读取每种格式,例如

"*nn"
会读取两个数字,
"*ll"
会读取两行。但事实似乎并非如此。

我找到的关于此的唯一地方是 reddit 评论这么说

但是“umber”是一个噪音字符串。您依靠 file.read 的实现来忽略星形格式第二个之后的格式说明符中的所有字符。如果情况发生变化怎么办?

那么

"*all"
之类的正确行为是什么,或者它真的被定义了吗?

ps:我使用的是Lua 5.3,但我检查过的其他版本的相关参考是相同的。

lua lua-5.3
1个回答
0
投票

Lua 不检查整个单词。它仅测试可选星号之后的第一个符号。

如果您查看 lua 源代码,具有

liolib.c
库函数的
io
文件 - 您会发现第一个
*
符号(如果存在)会被跳过,它只是为了与旧版本兼容。然后测试后的第一个字母是“n”代表数字,“l”代表行,“L”代表带有行尾的行,“a”代表整个文件。它并不关心该字符串中是否还有其他字母,您可以编写任何可读性更好的字母 - 只要第一个字母在该列表中 - 它就会起作用。但如果您需要多次读取,它会在 read() 调用中检查更多字符串参数。

© www.soinside.com 2019 - 2024. All rights reserved.