LUA怎么获取指定的函数返回值 10

例如LUA函数f()如下:functionf()a,b,c=1,2,3returna,b,cend那当我想要调用f()只需要获得第2个参数,而第1、3个参数忽略不管,那应... 例如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()
展开
 我来答
金牛座gxy
推荐于2016-09-19 · TA获得超过1291个赞
知道小有建树答主
回答量:223
采纳率:50%
帮助的人:76万
展开全部

当 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

运行结果:

oO大王
2020-05-24
知道答主
回答量:23
采纳率:0%
帮助的人:10.8万
展开全部
lua_pcall完需要调用lua_pop,上面回答误人子弟,pcall完直接close了。。。太demo了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-12-16
展开全部
比如local a = f() 函数f()的返回值就赋给了a呀或者if 0==f() then print(“OK”)end
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
okingmax8984
推荐于2018-03-13 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:118
采纳率:50%
帮助的人:103万
展开全部
_,e,_=f()
追问
我再问一下就是怎么获取table里所有的key啊?
比如:
t={["a"]="asd",b="33",[1]="df",c=23}
那我怎么可以得到这张表里所有的key值啊比如a,b,1,c?
我不用pairs()函数来检索,我只是想知道自己写函数的话怎样可以获取这些值啊?
追答
local t={["a"]="asd",b="33",[1]="df",c=23}

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式