Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Luaj计算简单表达式?_Android_Lua_Luaj - Fatal编程技术网

Android 如何使用Luaj计算简单表达式?

Android 如何使用Luaj计算简单表达式?,android,lua,luaj,Android,Lua,Luaj,我对Lua完全陌生 我有一个非常简单的脚本: “var=1” 我没有找到如何从我的java应用程序中获取此表达式的结果: “var==3和100或-1” 我从以下几点开始: Globals globals = JsePlatform.standardGlobals(); LuaValue chunk = globals.load("var = 4"); chunk.call(); LuaValue luaGetLine = globals.get("var"); 正在按预期返回“4” 但是

我对Lua完全陌生

我有一个非常简单的脚本: “var=1”

我没有找到如何从我的java应用程序中获取此表达式的结果:

“var==3和100或-1”

我从以下几点开始:

Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.load("var = 4");
chunk.call();

LuaValue luaGetLine = globals.get("var");
正在按预期返回“4”

但是

返回零

LuaValue luaGetLine=globals.get(“var_tex1==3和100或-1”)

您正在尝试以表达式“var_tex1==3和100或-1”的求值结果的名称读取全局变量。您可以在结果中得到100或-1。虽然您可以使用这样的“名称”创建变量,但与其他所有表一样,全局环境只是另一个表,这可能不是您真正想要做的。

globals.get(“key”)返回globals表中对象的LuaValue,它不用于执行表达式。作为示例,您给出的代码试图找到一个名为“var_tex1==3和100或-1”的变量,该变量返回null,因为不存在这样的变量

如果需要100或-1,应尝试用Java计算:

int result = globals.get("var_tex1").checkint() == 3 ? 100 : -1;
如果您需要将结果设置为LuaValue,您可以执行以下操作:

public static final LuaValue Lua_100 = LuaInteger.valueOf(100);
public static final LuaValue Lua_n1 = LuaInteger.valueOf(-1);

public LuaValue check() {
    return globals.get("var_tex1").checkint() == 3 ? Lua_100 : Lua_n1;
}
另一个选项是完全按照设置值的方式执行:

public LuaValue eval(String s)
{
    LuaValue chunk = globals.load("__temp_result__=" + s);
    chunk.call();

    LuaValue result = globals.get("_temp_result_");
    globals.set("__temp_result__", LuaValue.NIL);

    return result;
}
然后打电话:

LuaValue result = eval("var_tex1 == 3 and 100 or -1");

如果想要整数而不是LuaValue,只需在LuaValue上调用checkint()

这就是我想要的:我需要得到100或-1的结果。但显然,这不是获得表达式结果的好方法。你们知道我应该怎么做才能得到这个结果吗?你们想要表达式结果,但你们读的是一些不存在的全局变量。请参阅LuaJ手册,检查LuaValue.valueof()方法。
LuaValue result = eval("var_tex1 == 3 and 100 or -1");