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。
-
轻量级用户数据没有每个值的元表,所有轻量级用户数据共享一个默认未设置的元表。
➡️