在C+中访问Lua函数的返回值+;反之亦然 我在Lua有一些函数,C++中的一些函数,我从我的加法、幂和除法中得到正确的结果。我唯一的问题是阶乘,因为我无法将正确的数字传递给它,这应该是除法的结果
在卢阿:在C+中访问Lua函数的返回值+;反之亦然 我在Lua有一些函数,C++中的一些函数,我从我的加法、幂和除法中得到正确的结果。我唯一的问题是阶乘,因为我无法将正确的数字传递给它,这应该是除法的结果,c++,lua,C++,Lua,在卢阿: function powLua(a, n) b = 1 for i=1,n do b = b * a end return b end function divisionLua(a, b) c = b/a return c end aLua = additionLua(2, 3) bLua = additionLua(1, 3) print("Result of additionLua is a = "..aLua.."
function powLua(a, n)
b = 1
for i=1,n do b = b * a end
return b
end
function divisionLua(a, b)
c = b/a
return c
end
aLua = additionLua(2, 3)
bLua = additionLua(1, 3)
print("Result of additionLua is a = "..aLua.."\nResult of additionLua is b = "..bLua.."\n")
fac = factorialLua(divLua) <---- this is the part that doesn't work
print("factorial of divLua is "..fac.."\n")
导致factorialua(divLua)的正确结果,但是当我将“divLua”设置为division()的值时,如下所示:
int div = 5;
lua_pushnumber(L, div);
lua_setglobal(L, "divLua");
...
...
luaL_dofile(L, "test01.lua");
int div = division(L, 5, 30); //div should be 6 now
lua_pushnumber(L, div);
lua_setglobal(L, "divLua");
...
...
luaL_dofile(L, "test01.lua");
factorialua(divLua)的结果是1,而不是720
原因必须是division()必须在luaL_dofile之后调用,但lua_setglobal(L,“divLua”)必须在它之前。
因此,我需要让“div”知道稍后将进行的计算结果
有什么建议吗?上面有几个问题:
-
<> >您试图在代码之前计算<代码> FraceReLuua(DIVLUA)<代码> >从C++设置。
- 您正在使用负索引调用
,但它需要一个正整数lua\u pop
- 假设解决了前两点,您将尝试计算
125代码>这将是一个非常大的数字
factorialua
获取1
的原因是lua\u tonumber
返回0
,前提是给定的堆栈索引实际上不是一个数字。由于调用该函数时,divLua
仍然是nil
,因此可以有效地计算factorialua(0)
解决这一问题的两种显而易见的方法:
lua\u setglobal(L,“divLua”)
(我想补充一点,可以使用
luaL\u checknumber
而不是lua\u tonumber
来捕捉最后一个问题。)感谢您的快速回答。我换了lua_pop电话,没意识到那个错误。然后,在使用luaL_dofile执行脚本之前,我设置了divLua global。我已经试过了,我知道你是对的,但如果我这样做,它就无法识别分区的参数,即pwr和a,因为它们必须在执行脚本后设置。至少如果我在执行前声明它们是行不通的。
int div = division(L, 5, 30); //div should be 6 now
lua_pushnumber(L, div);
lua_setglobal(L, "divLua");
...
...
luaL_dofile(L, "test01.lua");