问题标签 [luaj]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 从 Luaj 运行 Java 方法,“预期索引,得到字符串”
我正在做一个小项目,并希望包含 lua 脚本,以便用户可以创建自己的内容。我已经让它大部分工作了。我可以加载脚本,运行它们,或者从 java 中运行特定的 Lua 方法等。但我不知道如何在 java 中创建一个可以由 lua 脚本运行的方法。
我四处搜索,发现这篇文章准确地描述了我想要的东西。
不幸的是,我无法让它工作。
这是我正在尝试的最简单的代码示例。
主.java
MyLib.Java
SomeFunc.java
测试.lua
我得到的错误是index expected, got string
. 这是env.set("mine", mine);
在“MyLib.java”中的行引起的
完整的错误信息
java - 在 LuaJ 中获取打印调用
我正在编写一个 Java 程序,它使用 Lua 脚本来确定向程序的某些区域输出什么。目前,我的代码如下所示:
问题是调用tojstring()
似乎return
从 Lua 脚本返回值。这很好,但我需要print
接听电话,因为这就是屏幕上显示的内容。截至目前,print
调用直接发送到控制台(打印到控制台),我无法找到检索这些打印调用的方法。
我尝试过深入研究文档,但收效甚微。如果需要,将从 LuaJ 更改。
java - LuaJ 从 String 而不是 Path 加载
今天我尝试了 LuaJ 库,我真的很喜欢它,我唯一遇到的问题是我无法从包含函数的字符串加载,而是只能加载包含文件路径的字符串。
这是我尝试从字符串加载的代码:
使用此代码,我得到以下异常:
有效的代码,但我不想要,因为我需要从字符串而不是文件路径加载它是这样的:
所以我的问题是,我如何从字符串而不是路径加载它?
java - 是否可以从主机程序执行单个 lua 语句?
我正在尝试将基于 lua 的脚本系统嵌入到我的游戏引擎中。我希望脚本能够同时具有阻塞和非阻塞命令,例如:
由于“walkTo”需要在 1 帧以上的执行中处于“活动状态”,因此我希望能够从 Java 主机一次运行 1 条语句,而不是整个函数。这是因为拥有真正的多线程是多余的,这不是必需的。
如果我可以只执行 1 条语句,并保持执行状态“暂停”直到下一条语句执行,我将能够通过检查命令是否在主机中完成来实现阻塞命令,例如“walkTo”,如果是,则执行继续下一条语句,否则,等到下一帧迭代。
有什么方法可以使用 LuaJ(或任何其他 Lua api)从 Java 主机一次执行 1 条语句,还是我被迫使用 lex 和 yacc 开发自己的脚本引擎?
欢迎任何好主意,谢谢!
android - 在 Android 上使用 LuaJ 从 Lua 脚本中要求其他 lua 脚本
我在需要其他 Lua 脚本的 Android 上通过 LuaJ 从 Java 调用 Lua 脚本时遇到问题。我认为这与我当前的工作目录有关。
我在Java中尝试的是:
pathTest.lua:
对于这个特定的测试,为简单起见,两个 lua 文件都在同一个目录中,但我需要其他 lua 文件的相对路径。
我尝试过使用 package.path,但我尝试过的都没有奏效。在 Android 中运行时,默认情况下 package.path == "?.lua"。
我已经通过命令行使用相对路径运行了这个测试,并使用 Koneki 在 Eclipse 中运行了这个测试,它们工作正常。尤其是失败的 Android 环境。
此外,我无需在 Android 中正常工作即可获得 Lua 脚本。
android - LuaJ - 在从文件调用 Lua 脚本之前在 Java 代码中设置 package.path
我想出了如何使 Lua 脚本在 Android 环境中需要其他 Lua 脚本。
但是,该解决方案在顶级 Lua 脚本本身中有 package.path 配置。我想将 package.path 配置移动到运行脚本的 Java 代码,因为 package.path 特定于 Android 环境,而脚本可以在任何地方运行。
这是我尝试过的:
我还尝试了其他一些形式,例如:
或者从负载中获取 LuaValue 结果并将其传递给 LuaClosure。它们都导致脚本一开始就失败require
,无法找到引用的脚本。
有人有想法么?
*edit - 如果有人知道如何将工作目录设置为 /assets/lua/ 文件夹,那么我可以在 Lua 脚本中使用相对路径,那就更好了。
scala - 如何复制动态绑定函数的“普通”调用语法?
在下面的示例中,该变量fn2_class
表示要从 lua 脚本加载的函数,因此var
定义是必要的;在编译时不知道实际功能是什么。该变量fn1_class
表示同一想法的静态绑定版本。fn1_class
因此,和之间的唯一区别fn2_class
是前者被定义为一个值,而后者被定义为一个变量。
该方法getFunction
表示如何加载 lua 函数。真正的代码包括调用 luaj 库来生成函数。
考虑到这个上下文重新表述这个问题:如何定义一个fn3_class
动态绑定的变量,并且与示例中的值具有相同的调用语法fn1_class
?
这个问题涉及 scala-2.10 或更高版本。这种代码在 scala-2.9 中编译和执行。
说明问题的示例代码:
上面的代码在编译时会生成以下错误消息(scala-2.10)。
java - java - LuaJ:超过 3 个参数
是否有可能在 lua 函数中使用三个以上的参数?
这是我的一段代码:
android - 尝试在 android 应用程序中使用 LUAJ,找不到类 Lua
我怀疑我的无知比 LUAJ 更深刻,所以请温柔一点。
目标:在我的应用程序中定期运行 lua 脚本,在 Lua 和 Java 之间来回传递数据,具有一定的安全性(例如,不要让 lua 删除文件)
我的大部分应用程序都是直接的 android/java,并且工作正常。在这种情况下,我不是一个白痴。
通过各种示例,我最终将 LUAJ Jar 文件作为外部 Jar 放入 Eclipse。之后,这些进口工作
并且大部分代码主要是编译,但我仍然没有在此行中使用的“Lua”接口:
该行因“由于 Lua 不是超类而无法实现”而失败。我很确定它不知道 Lua 是什么(除非它在其他命名空间或其他东西中找到同源)。
此外,我对 Lua:add() 等的覆盖也抱怨(他们没有超级可以覆盖)例如:
(必须覆盖超类型)
我假设我需要为 Lua 本身添加一个外部 Jar 之类的东西?,但我没有找到这样做的说明(另外,如果 LUAJ 是 Lua 的完整 java 实现,那么我希望这个接口类也成为 LUAJ jar 的一部分。
在我找到的三个 LUAJ jar 中,我只告诉了 Eclipse 其中一个(JSE,而不是 JME 或 Source)。