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