Lua api(九) lua_toboolean/lua_to*

  • 原型:const void *lua_topointer (lua_State *L, int index);
  • 解释: 把给定索引处的值调换为通常的 C 指针 。 那几个值能够是三个userdata ,table ,thread 或是叁个 function ; 不然,lua_topointer
    重回 NULL 。 不相同的对象有不相同的指针。
    不设有把指针再折返原有项目标措施。

  • 原型:lua_Integer lua_tointeger (lua_State *L, int idx);
  • 批注: 把给定索引处的 Lua 值转变为 lua_Integer
    这样贰个有标识整数类型。 那么些 Lua
    值必得是一个数字只怕叁个得以调换为数字的字符串, 否则 lua_tointeger
    返回 0 。
  • 原型:int lua_isnumber (lua_State *L, int index);
  • 演讲:当给定索引的值是贰个数字,或是七个可转换为数字的字符串时,返回1 ,不然再次回到 0 。

  • 第一大家来新建二个文件命名称叫totransformtest.lua,然后在文书中编辑如下代码:

  • 结果

-- 定义一个tableinformation = { name = "tom", age = 18, sex = "man",}function func_testtype() print("lua -- > test type")end

  • 接下去大家来编排c++调用的代码:
  • 原型:const char *lua_tostring (lua_State *L, int index);
  • 解释:等价于 lua_tolstring ,而参数 len 设为 NULL 。
 lua_State *L = lua_open(); luaL_openlibs; luaL_dofile(L,"ischecktest.lua"); // 加载执行lua文件 lua_getglobal(L, "func_testtype"); // 函数入栈 if(lua_isfunction // -->lua_isfunction用法 { printf("c++ --> stack pos %d : is functionn", lua_gettop; } if(!lua_iscfunction // -->lua_iscfunction用法 { printf("c++ --> stack pos %d : is not c functionn", lua_gettop; } lua_getglobal(L,"information"); // 将全局表压入栈 if(lua_istable // -->lua_istable用法 { printf("c++ --> stack pos %d : is tablen", lua_gettop; } lua_pushboolean; if(lua_isboolean // -->lua_isboolean用法 { printf("c++ --> stack pos %d : is booleann", lua_gettop; } lua_pushstring; if(lua_isstring // -->lua_isstring用法 { printf("c++ --> stack pos %d : is stringn", lua_gettop; } if(lua_isnumber // -->lua_isnumber用法 { printf("c++ --> stack pos %d : is numbern", lua_gettop; } lua_pushnil; if(lua_isnil // -->lua_isnil用法 { printf("c++ --> stack pos %d : is niln", lua_gettop; } lua_close; //关闭lua环境 
-- 定义一个tableinformation = { name = "AlbertS", age = 20, sex = "man", married = false,}function func_testtype() print("lua -- > this is a lua function");end

  • 原型:lua_CFunction lua_tocfunction (lua_State *L, int index);
  • 分解:把给定索引处的 Lua 值转换为贰个 C 函数。 这些值必需是贰个 C
    函数;假若不是就回到 NULL 。
  • 原型:int lua_isnil (lua_State *L, int index);
  • 解说:当给定索引的值是 nil 时,重返 1 ,不然再次来到 0 。

图片 1ischeck.png

  • 由于lua_toboolean会把别的区别于 falsenil 的值充任 1
    赶回,所以您借使想只收到真正的 boolean
    值,就须求采纳lua_isboolean来测量检验值的花色。
  • lua_tolstring 再次来到 Lua
    状态机中字符串的以对齐指针。那些字符串总能保险最后一个字符为零
    ,并且它同意在字符串内满含多个如此的零。因为 Lua
    中只怕发生垃圾搜集,所以不保障 lua_tolstring
    重返的指针,在相应的值从堆栈中移除后依然有效。
  • lua_tostring是利用lua_tolstring的贰个宏而已。
  • 可能您会纳闷为啥有lua_isfunction和lua_iscfunction函数,但却唯有lua_tocfunction而没有lua_tofunction函数,其实稳重思虑就知道唯有转化成c
    function才有含义,假如是八个lua function在c代码里是从未有过用处的。
  • 原型:int lua_iscfunction (lua_State *L, int index);
  • 演说:当给定索引的值是二个 C 函数时,再次回到 1 ,不然再次来到 0 。

发表评论

电子邮件地址不会被公开。 必填项已用*标注