gpt4 book ai didi

java - 如何获取java类中的Luaj函数参数名称?

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:09 26 4
gpt4 key购买 nike

有没有办法获取.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文件而不知道其中包含什么函数。如何获取函数的名称('MyAdd')、该函数的输入参数的数量以及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);
}

我希望我清楚地表达了我想要实现的目标。如有任何帮助,我们将不胜感激。

最佳答案

我认为没有直接的方法可以做到这一点,所以这就是我采取的方法。

Sol 仅针对所提到的情况。

1) 读取.lua文件内容到字符串 2)检查字符串中是否包含字符串“function” 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();
}

关于java - 如何获取java类中的Luaj函数参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39770571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com