- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
澄清(对不起,问题不具体):他们都试图将堆栈中的项目转换为 lua_Number
. lua_tonumber
还将转换表示数字的字符串。怎么样luaL_checknumber
处理不是数字的东西?
还有luaL_checklong
和 luaL_checkinteger
.它们是否与 (int)luaL_checknumber
相同和 (long)luaL_checknumber
分别?
最佳答案
引用手册确实回答了这个问题。我引用了 Lua 5.2 引用手册,但在 5.1 手册中也有类似的文字。然而,手册非常简洁。很少有一个事实在一个以上的句子中被重述。此外,您通常需要关联在广泛分开的部分中陈述的事实,以了解 API 函数的更深层次的含义。
这不是缺陷,而是设计使然。这是该语言的引用手册,因此其主要目标是完整(且正确)描述该语言。
有关“如何”和“为什么”的更多信息,一般建议还阅读 Programming in Lua .在线副本在描述 Lua 5.0 时已经很长了。当前的纸质版本描述了 Lua 5.1,并且正在开发描述 Lua 5.2 的新版本。也就是说,即使是第一版也是一个很好的资源,只要您还注意自 5.0 版以来语言的变化。
引用手册中有很多关于 luaL_check*
的内容。函数族。
每个 API 条目的文档块都附带一个描述其使用堆栈的标记,以及在什么情况下(如果有)会抛出错误。这些 token 在 section 4.8 中描述:
Each function has an indicator like this:
[-o, +p, x]
The first field, o, is how many elements the function pops from the stack. The second field, p, is how many elements the function pushes onto the stack. (Any function always pushes its results after popping its arguments.) A field in the form x|y means the function can push (or pop) x or y elements, depending on the situation; an interrogation mark '?' means that we cannot know how many elements the function pops/pushes by looking only at its arguments (e.g., they may depend on what is on the stack). The third field, x, tells whether the function may throw errors: '-' means the function never throws any error; 'e' means the function may throw errors; 'v' means the function may throw an error on purpose.
luaL_
而不仅仅是
lua_
开头的所有函数)的第 5 章的开头,我们发现:
Several functions in the auxiliary library are used to check C function arguments. Because the error message is formatted for arguments (e.g., "bad argument #1"), you should not use these functions for other stack values.
Functions called luaL_check* always throw an error if the check is not satisfied.
luaL_checknumber
用 token
[-0,+0,v]
记录这意味着它不会干扰堆栈(它什么都不弹出也不压入)并且它可能会故意抛出一个错误。
luaL_checkint()
“检查函数参数
arg
是否是一个数字,并将这个数字转换为
int
”,根据需要改变类型转换中命名的类型。
lua_tonumber()
用 token
[-0,+0,-]
描述这意味着它对堆栈没有影响并且不会抛出任何错误。记录从指定的堆栈索引返回数值,如果堆栈索引不包含足够数字的内容,则返回 0。记录使用更通用的函数
lua_tonumberx()
它还提供了一个标志,指示它是否成功转换了一个数字。
luaL_checknumber()
在
lauxlib.c
.可以看出是按照
lua_tonumberx()
来实现的以及内部函数
tagerror()
其中调用
typerror()
这是通过
luaL_argerror()
实现的实际上抛出格式化的错误消息。
关于lua - luaL_checknumber 和 lua_tonumber 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078432/
澄清(对不起,问题不具体):他们都试图将堆栈中的项目转换为 lua_Number . lua_tonumber还将转换表示数字的字符串。怎么样luaL_checknumber处理不是数字的东西? 还有
我尝试将字符串从 Lua(5.1.5) 转换为整数,并检查该数字是否为有效整数(0~99999)。但是,我发现 lua_tonumber() 在处理大整数时与 lua_tointeger() 有不同的
我是一名优秀的程序员,十分优秀!