有没有办法获取.lua文件中定义的所有函数参数的计数和名称?
例如我的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文件而不知道其中的函数是什么。如何获取函数的名称(&#39; MyAdd&#39;),此函数的输入参数数量以及java中的这些输入参数(num1,num2和num3)的名称
如果我知道函数的名称以及输入参数的数量和顺序,我可以调用以下函数。
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 :(得分:0)
我认为没有直接的方法,所以这就是我采取的方法。
Sol仅针对上述案例。
1)将.lua文件的内容读取到String 2)检查字符串是否包含字符串&#34; function&#34; 3)找到函数名的索引 4)找到&#39;(&#39;和&#39;)&#39;的指数 5)从步骤4的索引之间获取参数作为子串。 6)当&#39;,&#39;时分割子串。发生并保存到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();
}