-
返回基本数据类型
-
数字类型(整数和浮点数)
- 在C函数中,可以使用
lua_pushnumber函数将一个数字(整数或浮点数)压入Lua栈。当C函数返回后,Lua会从栈顶获取这个数字作为返回值。 - 例如,以下是一个简单的C函数,用于计算两个数字的和并返回结果给Lua:
cstatic int add_numbers(lua_State *L) { double num1 = lua_tonumber(L, 1); double num2 = lua_tonumber(L, 2); double sum = num1 + num2; lua_pushnumber(L, sum); return 1; // 返回一个值 } - 在C函数中,可以使用
-
字符串类型
- 使用
lua_pushstring函数把一个C风格的字符串压入Lua栈。 - 例如,一个C函数返回一个固定的字符串给Lua:
cstatic int get_greeting(lua_State *L) { lua_pushstring(L, "Hello, Lua!"); return 1; } - 使用
-
布尔类型
- 通过
lua_pushboolean函数将布尔值(0表示假,非0表示真)压入Lua栈。 - 例如,一个C函数检查一个数字是否大于10并返回布尔结果:
cstatic int is_greater_than_ten(lua_State *L) { int num = lua_tointeger(L, 1); int result = (num > 10); lua_pushboolean(L, result); return 1; } - 通过
-
-
返回表(Table)类型
- 首先使用
lua_newtable函数创建一个空表,然后使用lua_push*系列函数(如lua_pushstring、lua_pushnumber等)将键和值压入栈,再通过lua_settable函数将键值对设置到表中。最后,将这个表留在栈顶返回给Lua。 - 例如,一个C函数创建一个包含学生姓名和成绩的表并返回给Lua:
cstatic int create_student_table(lua_State *L) { lua_newtable(L); lua_pushstring(L, "name"); lua_pushstring(L, "Alice"); lua_settable(L, -3); lua_pushstring(L, "score"); lua_pushnumber(L, 90); lua_settable(L, -3); return 1; } - 首先使用
-
返回函数类型
- 使用
lua_pushcfunction函数将一个C函数(C closure)压入Lua栈。这样,Lua就可以像调用本地函数一样调用这个C函数。 - 例如,定义一个C函数用于打印一条消息,然后将这个C函数返回给Lua:
cstatic int print_message(lua_State *L) { printf("This is a message from C function.\n"); return 0; } static int return_function(lua_State *L) { lua_pushcfunction(L, print_message); return 1; } - 使用
-
返回用户数据(UserData)类型
- 首先通过
lua_newuserdata函数创建用户数据,然后可以对用户数据进行初始化(例如填充结构体成员等操作),最后将用户数据压入Lua栈返回给Lua。 - 假设我们有一个简单的结构体,想要将这个结构体的实例作为用户数据返回给Lua:
ctypedef struct { int id; char *name; } MyUserData; static int create_userdata(lua_State *L) { MyUserData *user_data = (MyUserData *)lua_newuserdata(L, sizeof(MyUserData)); user_data->id = 1; user_data->name = "Test User"; return 1; } - 首先通过
-
返回多个值
- 如果C函数需要返回多个值给Lua,可以依次将这些值压入Lua栈,然后返回值的个数。
- 例如,一个C函数返回一个数字和一个字符串:
cstatic int return_two_values(lua_State *L) { lua_pushnumber(L, 10); lua_pushstring(L, "Multiple values"); return 2; }
C函数如何返回参数lua使用
最后一个bug2024-11-17 10:42
相关推荐
c++之路2 小时前
CMake 系列教程(二):基础命令详解南境十里·墨染春水6 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术能喵烧香7 小时前
深度解析:Linux 与 Windows 超级权限账户的本质差异JosieBook8 小时前
【数据库】时序预测能力的分级进化:TimechoAI如何让每一类用户都能精准预见未来加号38 小时前
【C#】 文件与目录管理:创建、删除操作的技术解析diving deep9 小时前
脚本速览-python一生了无挂9 小时前
Java处理JSON技巧教学(从基础到高阶实战全覆盖)swordbob9 小时前
Spring 单例 Bean 是线程安全的吗?Moshow郑锴9 小时前
Ubuntu 26.04 中文输入法 : fcitx5+Rime中州韵引擎2601_9516437710 小时前
Python第一,Java跌出前三,C语言杀回来了