Передайте аргументы командной строки в lua, используя java

Я пытаюсь запустить скрипт lua из java, используя приведенный ниже код, и он работает нормально.

Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.loadfile("com/example/hello.lua");
chunk.call();

Теперь я хочу передать аргументы командной строки в свой сценарий lua, может ли кто-нибудь помочь mw с кодом, как передать аргумент командной строки в файл lua из java.

🤔 А знаете ли вы, что...
Java позволяет создавать графические интерфейсы пользователя с помощью библиотеки Swing.


28
1

Ответ:

Решено

Похоже, вы используете LuaJ. Во-первых, «куски» Lua — это просто специальные функции, которые получают свои аргументы в ... vararg. hello.lua может выглядеть следующим образом:

local arg1, arg2 = ...
print("arg1", arg1, "arg2", arg2)

Используя loadfile Lua, вы можете передавать аргументы просто как аргументы функции при выполнении загруженного фрагмента:

local chunk = assert(loadfile"hello.lua") -- compile & load the file, do not run it
chunk("first arg", "second arg") -- run the file with two args

Ваш текущий код Java вызывает chunk.call() без каких-либо аргументов, что эквивалентно chunk() в Lua. Вы можете использовать метод invoke для передачи списка LuaValue аргументов:

Просто замените chunk.call(); на

chunk.invoke(new LuaValue[] {LuaValue.valueOf("first argument"), LuaValue.valueOf("second argument")});

для вызова фрагмента с двумя аргументами, эквивалентными вызову в приведенном выше примере Lua.