【问题标题】:C API and lua typesC API 和 lua 类型
【发布时间】:2013-12-06 19:39:23
【问题描述】:

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

Lua 中有八种基本类型:nil、boolean、number、string、 用户数据、函数、线程​​和表。

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

【问题讨论】:

    标签: c lua


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2020-03-30
      • 2011-05-30
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多