Confusing Behaviors in Lua C API

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

Lua 中没有单独的整数类型,整数是数字的一种。数字可以被视为字符串,反之亦然。`lua_tostring` 会将数字转换为字符串。轻量级用户数据是用户数据的一种,尽管类型 ID 不同,但共享同一类型名称“userdata”,且没有单独的元表,所有轻量级用户数据共享一个默认未设置的元表。

🎯

关键要点

  • Lua 中没有单独的整数类型,整数是数字的一种。

  • 数字可以被视为字符串,反之亦然。

  • lua_tostring 会将数字转换为字符串,调用后类型会变为字符串,但仍然被视为数字。

  • lua_isinteger 仅对通过 lua_pushinteger 生成的值返回 true,调用 lua_tostring 后不再是整数。

  • 用户数据和轻量级用户数据有不同的类型 ID,但共享同一类型名称 'userdata'。

  • lua_islightuserdata 是 lua_isuserdata 的子集,只有轻量级用户数据返回 true。

  • 轻量级用户数据没有每个值的元表,所有轻量级用户数据共享一个默认未设置的元表。

➡️

继续阅读