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.pushJavaObject() の代わりに L.pushNumber(8.0) を使用する必要がありました

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 を「ユーザーデータ」のタイプと見なします。この場合、定義済みの操作はありません。JavaObject * 2処理方法を定義していないため、Lua は a の処理方法を知りません。

OTOH、Luaは組み込みのプリミティブ型であるため、数値の処理方法を知っています。あなたが提示したコード スニペットの場合、JavaObject 内にラップされた数値を処理する方法を Lua に指示する追加のコードを記述する代わりに、数値をプッシュすることが最も簡単な方法です。

于 2011-12-24T04:51:47.793 に答える