LUA怎么获取指定的函数返回值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LUA怎么获取指定的函数返回值相关的知识,希望对你有一定的参考价值。
例如LUA函数f()如下:
function f()
a,b,c=1,2,3
return a,b,c
end
那当我想要调用f()只需要获得第2个参数,而第1、3个参数忽略不管,那应该怎么做呢?
我已经知道的方法如下:
d,e,f=f()
这种方式即可将f()第2个返回值存入e,但就是白白浪费了d,f,所以有没有什么方法直接让函数只返回第2个值(不许改变f1()函数)?
我知道有一种用法(f()只会返回1个值,不过返回的是第1个值啊。
纠错:
”参数“ 改为 “返回值”
f1() 改为 f()
当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 相同类型的栈来交互。C 函数从栈中获取她的参数,调用结束后将返回结果放到栈中。为了区分返回结果和栈中的其他的值,每个 C 函数还会返回结果的个数(the function returns (in C) the number of results it is leaving on the stack.)。
// luacallcpp.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
//lua头文件
#ifdef __cplusplus
extern "C"
#include "lua.h"
#include <lauxlib.h>
#include <lualib.h>
#else
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#endif
int static add(lua_State* L)
//获取第一个参数
double x=lua_tonumber(L,1);
double y=lua_tonumber(L,2);
//返回值压栈,压入两个返回值
lua_pushnumber(L,x+y);
lua_pushnumber(L,1000);
//返回值的个数,
return 2;
int _tmain(int argc, _TCHAR* argv[])
lua_State * L=NULL;
/* 初始化 Lua */
L = lua_open();
/* 载入Lua基本库 */
luaL_openlibs(L);
/* 运行脚本 */
luaL_dofile(L, "./script/func.lua");
//函数入栈
lua_pushcfunction(L,add);
//设置全局函数名
lua_setglobal(L,"Add");
//调用lua函数LUACALLCPP来反调cpp中的add
lua_getglobal(L,"LUACALLCPP");
lua_pushnumber(L,10);
lua_pushnumber(L,34.33);
//两个参数,两个返回值
lua_pcall(L,2,2,0);
//取返回值二
printf("lua call cpp return val is %f \\n",lua_tonumber(L,-1));
//取返回值一
printf("lua call cpp return val is %f \\n",lua_tonumber(L,-2));
/* 清除Lua */
lua_close(L);
return 0;
---------------------------------------
--region *.lua
--Date
--此文件由[BabeLua]插件自动生成
print("func.lua hava been loaded")
function LUACALLCPP(x,y)
-- 调用c++中的函数
return Add(x,y)
--print(Add(x,y))
end
--endregion
运行结果:
参考技术A lua_pcall完需要调用lua_pop,上面回答误人子弟,pcall完直接close了。。。太demo了 参考技术B 比如local a = f() 函数f()的返回值就赋给了a呀或者if 0==f() then print(“OK”)end 参考技术C _,e,_=f()追问我再问一下就是怎么获取table里所有的key啊?
比如:
t=["a"]="asd",b="33",[1]="df",c=23
那我怎么可以得到这张表里所有的key值啊比如a,b,1,c?
我不用pairs()函数来检索,我只是想知道自己写函数的话怎样可以获取这些值啊?
local x = next(t)
print(next(t))
while next(t,x) do
print(next(t,x))
x = next(t,x)
end
Lua有这个~有不懂得可以参考这个页面http://www.codingnow.com/2000/download/lua_manual.html#pdf-next
lua入门之二:c/c++ 调用lua及多个函数返回值的获取
当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 同样类型的栈来交互。
C 函数从栈中获取她的參数。调用结束后将返回结果放到栈中。为了区分返回结果和栈中的其它的值,每一个 C 函数还会返回结果的个数(the function returns (in C) the number of results it is leaving on the stack.)。
// luacallcpp.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> //lua头文件 #ifdef __cplusplus extern "C" { #include "lua.h" #include <lauxlib.h> #include <lualib.h> } #else #include <lua.h> #include <lualib.h> #include <lauxlib.h> #endif int static add(lua_State* L) { //获取第一个參数 double x=lua_tonumber(L,1); double y=lua_tonumber(L,2); //返回值压栈,压入两个返回值 lua_pushnumber(L,x+y); lua_pushnumber(L,1000); //返回值的个数, return 2; } int _tmain(int argc, _TCHAR* argv[]) { lua_State * L=NULL; /* 初始化 Lua */ L = lua_open(); /* 加载Lua基本库 */ luaL_openlibs(L); /* 执行脚本 */ luaL_dofile(L, "./script/func.lua"); //函数入栈 lua_pushcfunction(L,add); //设置全局函数名 lua_setglobal(L,"Add"); //调用lua函数LUACALLCPP来反调cpp中的add lua_getglobal(L,"LUACALLCPP"); lua_pushnumber(L,10); lua_pushnumber(L,34.33); //两个參数。两个返回值 lua_pcall(L,2,2,0); //取返回值二 printf("lua call cpp return val is %f \n",lua_tonumber(L,-1)); //取返回值一 printf("lua call cpp return val is %f \n",lua_tonumber(L,-2)); /* 清除Lua */ lua_close(L); return 0; }
--region *.lua --Date --此文件由[BabeLua]插件自己主动生成 print("func.lua hava been loaded") function LUACALLCPP(x,y) -- 调用c++中的函数 return Add(x,y) --print(Add(x,y)) end --endregion
执行结果:
以上是关于LUA怎么获取指定的函数返回值的主要内容,如果未能解决你的问题,请参考以下文章