lua中的lua_rawgeti和lua_rawseti函数用法

// gcc a.c -llua5.1

#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h>


int l_map(lua_State *L)
{
int i, n;

//第一个元素必须是table
luaL_checktype(L, 1, LUA_TTABLE);
//第二个元素必须为函数
luaL_checktype(L, 2, LUA_TFUNCTION);

//获取table的大小
n = lua_objlen(L, 1);


/*
* 从table中得到相应下标的元素
lua_rawgeti(L, index, key)
index表示table在栈中的位置
key表示元素在table中的位置
* */
/*
* 把值放到table相应下标位置
lua_rawseti(L, index, key)
index表示table在栈中的位置
key表示元素在table中的位置
* */


for (i = 1; i <= n; i++)
{
lua_pushvalue(L, 2);// 压入 f
lua_rawgeti(L, 1, i);//压入t[i]
lua_call(L, 1, 1);//调用f(t[i])
printf("lua data = %g\n", lua_tonumber(L, -1));
lua_rawseti(L, 1, i);// t[i] = 结果
}


printf("stack size = %d\n", lua_gettop(L));


for (int i = 1; i <= n; i++)
{
lua_rawgeti(L, 1, i);//压入t[i]
printf("lua data = %g\n", lua_tonumber(L, -1));
}


return 0;
}


int main()
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);


lua_pushcfunction(L, l_map);
lua_setglobal(L, "map");


const char *fname = "a.lua";


luaL_loadfile(L, fname);
lua_pcall(L, 0, 0, 0);




lua_close(L);


return 0;

}

--a.lua



function  f(a)
return 2*a
end


tab = {1, 2, 3, 4, 5}


map(tab, f)

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值