Lua错误尝试对局部变量执行算术运算

Lua错误尝试对局部变量执行算术运算,lua,luajava,Lua,Luajava,下面是函数 计算lua: function foo(n) return n*2 end 这是我的LuaJavaCall L.getGlobal("foo"); L.pushJavaObject(8); int retCode=L.pcall(1,1,0); // nResults)//L.pcall(1, 1,-2); String errstr = L.toString(-1); // Attempt to perform arithmetic on local variable

下面是函数 计算lua:

function foo(n) 
return n*2 
end
这是我的LuaJavaCall

L.getGlobal("foo");
L.pushJavaObject(8);
int retCode=L.pcall(1,1,0); // nResults)//L.pcall(1, 1,-2);
String errstr =  L.toString(-1);   // Attempt to perform arithmetic on local variable 'n'

更新:如下所示,我需要使用L.pushNumber(8.0)而不是L.pushJavaObject()

尝试使用
L.pushNumber
而不是
L.pushJavaObject
,如下所示:

L.getGlobal("foo");
L.pushNumber(8.0);
int retCode = L.pcall(1,1,0);
String errstr = L.toString(-1);
Lua可能将JavaObject视为一种“userdata”,在这种情况下,它没有预定义的操作;Lua不知道如何处理
JavaObject*2
,因为您没有定义如何处理它


OTOH,Lua确实知道如何处理数字,因为这是一个内置的基本类型。对于您介绍的代码片段,推送一个数字是让它工作起来最不痛苦的方式,而不是编写额外的代码告诉Lua如何使用包装在JavaObject中的数字。

尝试使用
L.pushNumber
而不是
L.pushJavaObject

L.getGlobal("foo");
L.pushNumber(8.0);
int retCode = L.pcall(1,1,0);
String errstr = L.toString(-1);
Lua可能将JavaObject视为一种“userdata”,在这种情况下,它没有预定义的操作;Lua不知道如何处理
JavaObject*2
,因为您没有定义如何处理它


OTOH,Lua确实知道如何处理数字,因为这是一个内置的基本类型。对于您介绍的代码片段,推送一个数字是让它工作起来最不痛苦的方式,而不是编写额外的代码告诉Lua如何使用包装在JavaObject中的数字。

我不确定,但它是否与
L.pushJavaObject(8)有关?如果您尝试使用
L.pushNumber(8)取而代之?你想让我把它作为一个实际的答案发布给你,让你在这种情况下接受吗?;)是的,请看一看,我不确定,但它是否与
L.pushJavaObject(8)有关?如果您尝试使用
L.pushNumber(8)取而代之?你想让我把它作为一个实际的答案发布给你,让你在这种情况下接受吗?;)是的,请看一下