我正在看一个lua阶乘函数,我不明白的部分是为什么io.read参数中有“* n”?我知道io.read返回一个字符串值,但是什么是“* n”?它将值更改为数字,但它是如何工作的?我发现我也可以做“*号”,所以它适用于任何* n .....?
function fact(n)
if n < 0 then
return "undefine"
elseif n==0 then
return 1
else
return n * fact(n-1)
end
end
print("Enter a number:")
a = io.read("*n") -- reads a number *n == *number
print(fact(a))
答案 0 :(得分:2)
唯一的documented formats是:
"*n"
:读取一个数字;这是返回数字而不是字符串的唯一格式。"*a"
:从当前位置开始读取整个文件。在文件末尾,它返回空字符串。"*l"
:读取跳过行尾的下一行,在文件末尾返回nil。这是默认格式。"*L"
:读取保留行尾的下一行(如果存在),在文件末尾返回nil。查看来源(liolib.c
,424ff。),实施更加接受:
最后一点不是太小字符串的错误(可能不包括空字符串),因为Lua字符串具有0终结符以实现互操作性,这不是长度的一部分。
查看"*n"
- 格式,它是代码:
static int read_number (lua_State *L, FILE *f) {
lua_Number d;
if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) {
lua_pushnumber(L, d);
return 1;
}
else {
lua_pushnil(L); /* "result" to be removed */
return 0; /* read fails */
}
}
fscanf
的{{1}}读取数字(可配置,标准为LUA_NUMBER_SCAN
,请参阅"%lf"
)luaconf.h
失败。