2016-09-29 12 views
1

.luaファイルで定義されているすべての関数パラメータの数と名前を取得する方法はありますか?例えば、私のtest1.luaについてはJavaクラス内でLuaj関数のパラメータ名を取得する方法は?

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)、この関数の入力パラメータの数、そしてこれらの入力の名前を得ることができますか?

名前がわかっていれば関数と入力パラメータの数と順序は以下のように関数を呼び出すことができます。

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

私はそれを行う直接的な方法はないと思うので、これは私が取ったアプローチでした。

問題のケースのみに固有のソルです。

1)文字列 2)文字列は、文字列「機能」が含まれているかどうかをチェックし 3)関数名 4のインデックスを検索する)「(」のインデックスを検索し、「に.luaファイルの内容を読みます) ' 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(); 
    } 
関連する問題