【问题标题】:How to evaluate a simple expression with Luaj?如何用 Luaj 评估一个简单的表达式?
【发布时间】:2016-09-27 09:46:09
【问题描述】:

我对 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

【问题讨论】:

    标签: android lua luaj


    【解决方案1】:

    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()

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这就是我想要的:我需要得到 100 或 -1 的结果。但显然这不是获得表达式结果的好方法。你知道我应该怎么做才能得到这个结果吗?
      • 您想要表达式结果,但您正在读取一些不存在的全局变量。参见 LuaJ 手册,检查 LuaValue.valueof() 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多