如何使用 Luaj 评估简单的表达式?

我完全是新手Lua。

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

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

" var == 3 and 100 or -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 and 100 or -1");

返回nil

点赞
用户5675002
用户5675002
LuaValue luaGetLine = globals.get("var\_tex1 == 3 and 100 or -1");

你想要读取以表达式“var_tex1 == 3 and 100 or -1”结果作为名称的全局变量。结果可能是100或者-1。虽然你可以用这样的“名称”创建变量,因为全局环境只是另一个像其他所有表一样的表,但这可能不是你真正想要做的事情。

2016-05-29 14:40:18
用户1020123
用户1020123

globals.get("key") 返回全局表中对象的 LuaValue 值,它不用于执行表达式。您作为示例提供的代码试图找到名为 "var_tex1 == 3 and 100 or -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() 即可。

2016-08-24 02:50:11