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

时间:2016-05-29 14:03:32

标签: 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"如预期的那样。

但是

LuaValue luaGetLine = globals.get("var_tex1 == 3 and 100 or -1");

返回nil

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

  

LuaValue luaGetLine = globals.get(“var_tex1 == 3 and 100 or -1”);

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