首页 文章

C API和lua类型

提问于
浏览
4

如果你检查一些 lua docs,你可以看到:

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

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

1 回答

  • 4

    除了检查pushnumber中的信号NaN值之外,lua_pushintegerlua_pushnumber的实现是相同的 . 传递给pushinteger的整数在推送到Lua堆栈之前被强制转换为 lua_Number (这是double by default) .

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

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

相关问题