Как вызвать функцию Java в сопрограмме lua?
Я разрабатываю игру от luajava. Когда я вызываю функцию java в сопрограмме lua, я получаю сообщение об ошибке "Недопустимый вызов метода. Нет такого метода". Вот код
package com.soyomaker;
import org.keplerproject.luajava.LuaException;
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;
public class Main {
public static void main(String[] args) {
LuaState luaState = LuaStateFactory.newLuaState();
luaState.openLibs();
try {
luaState.pushObjectValue(new People());
luaState.setGlobal("people");
} catch (LuaException e) {
e.printStackTrace();
}
luaState.LdoFile("res/script.lua");
}
}
//=============================================================================
package com.soyomaker;
public class People {
public void sayHello(String name) {
System.out.println("hello " + name);
}
}
//=============================================================================
print(people)
print(people.sayHello)
people:sayHello("Bill")
function run()
print("========run========")
print(people)
print(people.sayHello)
people:sayHello("Jobs")
end
local co=coroutine.create(run)
print(coroutine.resume(co))
Вот результат:
hello Bill
userdata: 040256B8
<b>function: 040252C0</b>
========run========
userdata: 040256B8
<b>function: 04026650</b>
false Invalid method call. No such method.
Я печатаю "people.sayHello" дважды. Неожиданно получаю разные результаты.
Как я могу заставить это работать? Спасибо заранее!
1 ответ
Двоеточие запутывает тебя. Не существует функции sayHello с двумя аргументами. Используя двоеточие, вы отправляете "я" (люди) И строку в код Java. У вас нет метода Java, принимающего два аргумента. Просто используйте точку вместо двоеточия в Lua, чтобы она работала.