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

发布于 2024-12-22 17:42:11 字数 386 浏览 3 评论 0原文

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

Here is the function
calc.lua:

function foo(n) 
return n*2 
end

Here is my 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'

Update: as indicated below I needed to use L.pushNumber(8.0) instead of L.pushJavaObject()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゃ懵逼小萝莉 2024-12-29 17:42:11

尝试使用 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 不会知道如何处理 JavaObject * 2 因为您没有定义如何处理它。

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

Try using L.pushNumber instead of L.pushJavaObject like this:

L.getGlobal("foo");
L.pushNumber(8.0);
int retCode = L.pcall(1,1,0);
String errstr = L.toString(-1);

Lua probably sees JavaObject as a type of 'userdata' in which case there are no predefined operations for it; Lua won't know what to do with a JavaObject * 2 since you didn't define how to handle it.

OTOH, Lua does know how to handle a number since that's a builtin primitive type. For the code snippet you presented, pushing a number would be the least painful way to get it working instead of writing extra code that tells Lua how to work with numbers wrapped inside a JavaObject.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文