2016-09-29 76 views
1

有没有办法获得.lua文件中定义的所有函数参数的计数和名称?如何获得java类中的Luaj函数参数名称?

对于如我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文件的内容为String 2)检查字符串包含字符串“功能” 3)求函数名 4索引)查找指数“(”和“) ' 5)获取步骤4中索引之间的参数作为子串。 6)发生','时分割子串并保存到字符串数组。

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(); 
    }