天天挂茶馆

挂茶馆易语言论坛

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

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

[复制链接]
  • TA的每日心情
    郁闷
    2019-9-30 18:03
  • 签到天数: 33 天

    [LV.5]常住居民I

    25

    主题

    62

    帖子

    7576

    积分

    VIP会员

    Rank: 10Rank: 10Rank: 10

    积分
    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]



    本帖子中包含更多资源

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

    x
    回复

    使用道具 举报

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

    本版积分规则

    QQ|手机版| 蜀ICP备15031375号 川公网安备51030402000199号

    GMT+8, 2025-5-9 20:59 , Processed in 0.296695 second(s), 8 queries , File On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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