如果您查看某些lua
docs,则可以看到:
Lua中有八种基本类型:nil,boolean,number,string, userdata,function,thread和table。
C API函数的用途是什么,例如lua_pushunsigned()
和lua_pushinteger()
,因为lua
数字类型通常被定义为某种浮点类型(例如{{1} })?为什么不只是double
?
答案 0 :(得分:4)
lua_pushinteger和lua_pushnumber的实现是相同的,除了检查pushnn中信令NaN值的信号。传递给pushinteger的整数在推送到Lua堆栈之前被强制转换为lua_Number
(double
by default)。
这里额外抽象的主要优点是类型转换的确切实现由Lua处理而不是由用户处理。例如,您会注意到由于性能原因,为pushunsigned完成的转换比预期的要复杂一些。但是,如果您希望自己进行投射(并且事先知道lua_Number
和lua_Integer
的类型),那么在任何地方调用pushnumber都没有任何害处。
请注意,即将推出的Lua 5.3计划为introduce an integer number type语言,因此API函数之间的差异可能会变得更加相关。但是,现在预测此更改对API的最终影响还为时尚早。