2016-09-29 2 views
1

Есть ли способ получить счет и имена всех параметров функции, определенных в файле .lua?Как получить имена параметров функции Luaj внутри класса java?

Для, например, мой test1.lua является

function MyAdd(num1, num2, num3) 
    local x = 0 
    if(num1 <= num2) then 
     x = num1 + num2 + num3 
    else 
     x = (num1 - num2) + num3  
    end 
    return x 
end 

А внутри класса Java Я пытаюсь выполнить эту функцию путем передачи значений параметров.

Если эта функция Lua была написана другим пользователем и сохранена в папке, а приложение java загрузило этот файл Lua, не зная, какая функция находится внутри него. Как я могу получить имя функции («MyAdd»), количество входных параметров для этой функции, а также имя этих входных параметров (num1, num2 и num3) внутри java

Если я знаю имя функции и числа и порядка входных параметров я могу вызвать функцию, как показано ниже.

public static void main(String[] args) { 

    int a1 = 5; 
    int a2 = 10; 
    int a3 = 15; 

    Globals globals = JsePlatform.standardGlobals(); 
    globals.get("dofile").call(LuaValue.valueOf("./luascripts/test1.lua")); 

     LuaValue MyAdd = globals.get("MyAdd"); 

     Varargs results = MyAdd.invoke(LuaValue.varargsOf(new LuaValue 
      [] {LuaValue.valueOf(a3), LuaValue.valueOf(a1), LuaValue.valueOf 
       (a2)})); 
     System.out.println(results); 
} 

Надеюсь, я разъяснил, чего я пытаюсь достичь. Любая помощь приветствуется.

ответ

0

Я думаю, что нет прямого способа сделать это, так что это был подход, который я принял.

Sol специфичный только к случаю упомянутый в вопросе.

1) Прочитайте содержимое .lua файла в строку 2) Проверьте, если строка содержит «функцию» строка 3) Найти индекс имя-функции 4) Найти индексы «(» и «) ' 5) Получить параметры между индексами с шага 4 в качестве подстроки. 6) Разделите подстроку, когда «,» происходит и сохраняется в String Array.

String FnctionName = null; 
    String[] par_array = null; 
    try { 
     String contents = new String(Files.readAllBytes(Paths.get("./luascripts/test1.lua"))); 
     if (contents.contains("function")) { 

      int space = contents.indexOf(" "); 
      int left_br = contents.indexOf("("); 
      int right_br = contents.indexOf(")"); 
      FnctionName = contents.substring(space + 1, left_br); 
      String params = contents.substring(left_br + 1, right_br); 

      par_array = params.replaceAll("\\s+", "").split(","); 

      System.out.println(FnctionName);    
      for (String s : par_array) { 
       System.out.println(s); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
Смежные вопросы