天天挂茶馆

 找回密码
 立即注册
搜索
热搜: C++
查看: 4412|回复: 0

c++调用大漠系列:LUA类型检查和返回值

[复制链接]

25

主题

37

回帖

7576

积分

VIP会员

积分
7576
发表于 2018-10-7 15:29:20 | 显示全部楼层 |阅读模式
本帖最后由 1149 于 2018-10-7 16:01 编辑

1,luaL_checktype,当类型不一致程序会结束运行
[mw_shl_code=cpp,true]int test(lua_State* lua)
{

        luaL_checktype(lua, 1, LUA_TTABLE);

        
        return 0;
}[/mw_shl_code]

如图我传入double,在类型检查里我检测传入参数不是table,明显类型不匹配,所以程序中断运行


2,lua_type,自己判断,当类型不匹配,执行自己的操作
[mw_shl_code=cpp,true]int test(lua_State* lua)
{

        if (lua_type(lua, 2) != LUA_TNUMBER)
        {
                printf("传入的类型不是double");
                return 0;
        }

        printf("继续运行");
        
        return 0;
}[/mw_shl_code]

如图,在LUA里,第一我传入double,第二个传入string,明显第二个参数不匹配,所以打印第一个


printf,第二个printf没有打印

3,返回一个普通类型
[mw_shl_code=cpp,true]int test(lua_State* lua)
{

        lua_pushstring(lua, "我是string类型返回值");
       
        return 1;//1代表返回一个,pop 1个值
}[/mw_shl_code]


4,返回一个表类型
[mw_shl_code=cpp,true]int test(lua_State* lua)
{

        lua_newtable(lua);//创建一张表
        lua_pushnumber(lua, 1);//push 索引
        lua_pushnumber(lua, 99);;//push 值
        lua_settable(lua, 1);//做一个等价于 t[k] = v 的操作 并 pop 索引 pop 值

       
        lua_pushnumber(lua, 2);
        lua_pushnumber(lua, 88);;
        lua_settable(lua, 1);
       
        return 1;//1代表返回一个,pop 1个值
}[/mw_shl_code]



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表