当 Java 代码特别要求 LuaValue 时,我遇到了 LuaJ 不接受 LuaValue 作为参数的问题。
public void registerEvent(LuaValue id, String event, String priority,
LuaValue callback)
{
if(!(id instanceof LuaTable))
{
throw new RuntimeException("id must be an LuaTable");
}
EventDispatcher.addHandler(id, event, priority, callback);
}
理想情况下,这将允许 Lua 中的代码像这样简单地阅读......
function main(this)
this.modName="Some Mod"
this.lastX = 0
hg.both.registerEvent(this, "inputcapturedevent", "last", eventRun)
end
function eventRun(this, event)
this.lastX += event.getX()
end
可悲的是,这个简单的错误提示它需要用户数据,但得到了一个表。
org.luaj.vm2.LuaError: script:4 bad argument: userdata expected, got table
“this”的值在这两种情况下都是相同的 LuaTable,但是因为方法 registerEvent 是通过 CoerceJavaToLua.coerce(...) 添加的,所以它认为它想要一个 java 对象,而不是意识到它真的想要一个 LuaVale。
所以我的问题是这个。有没有更好的方法可以让我在 Java 和 Lua 中使用相同的功能?如果您一直在这里阅读,感谢您抽出宝贵时间:)