C API和lua类型

时间:2013-12-06 11:07:36

标签: c lua

如果您查看某些lua docs,则可以看到:

  

Lua中有八种基本类型:nil,boolean,number,string,   userdata,function,thread和table。

C API函数的用途是什么,例如lua_pushunsigned()lua_pushinteger(),因为lua数字类型通常被定义为某种浮点类型(例如{{1} })?为什么不只是double

1 个答案:

答案 0 :(得分:4)

lua_pushintegerlua_pushnumber的实现是相同的,除了检查pushnn中信令NaN值的信号。传递给pushinteger的整数在推送到Lua堆栈之前被强制转换为lua_Numberdouble by default)。

这里额外抽象的主要优点是类型转换的确切实现由Lua处理而不是由用户处理。例如,您会注意到由于性能原因,为pushunsigned完成的转换比预期的要复杂一些。但是,如果您希望自己进行投射(并且事先知道lua_Numberlua_Integer的类型),那么在任何地方调用pushnumber都没有任何害处。

请注意,即将推出的Lua 5.3计划为introduce an integer number type语言,因此API函数之间的差异可能会变得更加相关。但是,现在预测此更改对API的最终影响还为时尚早。