【问题标题】:Lua Error Attempt to perform arithmetic on local variableLua 错误尝试对局部变量执行算术运算
【发布时间】:2012-01-27 04:31:34
【问题描述】:

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

【问题讨论】:

  • 我不确定,但这可能与L.pushJavaObject(8); 有关吗?如果你改用L.pushNumber(8); 会怎样?
  • 您是否希望我将其发布为您在这种情况下接受的实际答案? ;)

标签: lua luajava


【解决方案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 不知道如何处理 JavaObject * 2,因为您没有定义如何处理它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2014-02-17
    • 2020-08-22
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多