1

这是函数calc.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()

4

1 回答 1

1

尝试使用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 视为一种“用户数据”,在这种情况下,它没有预定义的操作;Lua 不知道如何处理 aJavaObject * 2因为你没有定义如何处理它。

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

于 2011-12-24T04:51:47.793 回答