问题标签 [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.

0 投票
1 回答
1087 浏览

java - LuaJ 数组/列表类型安全

所以使用LuaJ。

如果我从 Java 向 Lua 传递一个List<T>type的 userdata,Luaj 仍然允许通过该函数T将任何类型的对象插入到该数组中。:add例如:

Java代码:

卢阿:

ExampleList 的结果:

该字符串不应该被允许,因为ExampleList它是List<Integer>

问题:有什么方法可以保持类型安全?

如果它有助于测试,这里是将 lua 脚本添加到 lua 内存中的代码(就在 之前try{}):

0 投票
1 回答
595 浏览

java - bindClass 和 newInstance 的区别

luajava中这两个函数有什么区别:

奇怪的是,我找不到任何明确的答案。大多数使用这些功能的网站都不会费心描述差异,而且我似乎能够从instance和调用相同的方法class

0 投票
1 回答
418 浏览

java - 我应该有一个还是多个脚本文件?

我正在用 Java 创建一个使用脚本的程序。我只是想知道我是否应该将我的脚本拆分为每个脚本的一个文件(更现实的是每种类型的脚本,如“数学脚本”和“帐户脚本”等),或者我是否应该为所有脚本使用一个聚集文件。

如果可能的话,我正在从更多的技术角度而不是实际的角度寻找答案,因为这个问题已经解释了实际的一面(分开经常修改的脚本和大型脚本)。

0 投票
1 回答
908 浏览

java - 是否可以访问 userdata 属性和功能?

我想将 Java 类的实例作为用户数据返回到我的 lua 脚本。是否可以从 lua 访问此实例的属性和功能?

像这样


这是我解决问题的尝试

Java(缩短)

lua

编辑:

在这里找到了答案

代替

我必须使用

0 投票
1 回答
1296 浏览

java - 如何将 java 对象暴露给 LuaJ

我最近开始学习 Lua,因为我需要在我正在开发的 Java 应用程序中使用它。为此,我正在使用 LuaJ。我在互联网上四处搜索,发现如何将 Java 方法公开给 LuaJ,但我不知道如何公开(让 LuaJ 访问)Java 对象。我看到另一篇关于将 C# 对象暴露给 Lua 的帖子,答案是这样的:

__index()在 Lua和任何语言的任何应用程序之间共享对象的一般方法是定义__newindex()一个userdata...

有人可以向我解释如何做这里描述的事情,或者解释另一种暴露对象的方法,这样我基本上可以做这样的事情:

0 投票
1 回答
245 浏览

java - 如何在 java 类中获取 Luaj 函数参数名称?

有什么方法可以获取 .lua 文件中定义的所有函数参数的计数和名称?

例如我的 test1.lua 是

在 Java 类中,我试图通过传递参数值来执行这个函数。

如果这个 Lua 函数是由其他用户编写并保存到一个文件夹中,并且 Java 应用程序加载了这个 Lua 文件而不知道其中的函数是什么。如何在 java 中获取函数的名称('MyAdd')、该函数的输入参数的数量以及这些输入参数的名称(num1、num2 和 num3)

如果我知道函数的名称以及输入参数的数量和顺序,我可以如下调用该函数。

我希望我清楚自己要达到的目标。任何帮助表示赞赏。

0 投票
1 回答
137 浏览

java - 如何实现 LuaJ 暂停?

我正在开发一个游戏引擎,并希望游戏处理一个 lua 文件。

目前我正在使用我编写的自定义脚本语言将每个命令存储在游戏可以执行的列表中。在这一点上,我的脚本语言非常原始,这就是我想切换到 Lua 的原因,但我不知道如何进行。

这是我正在尝试做的一个例子:

0 投票
1 回答
142 浏览

java - LuaJ 向量类

我正在尝试创建一个与 LuaJ 一起使用的 Vector 类。最终目标是让用户不用写太多的 lua,并在我的 Java 引擎上完成大部分工作。

据我了解,我需要为我的 Java 矢量类的 lua 表示设置元表吗?我遇到的问题是,当我试图覆盖一些元表功能时,它似乎对我的 lua 脚本没有任何影响。我现在要做的是覆盖 + 运算符,因此我可以将两个向量相加或将向量相加一个常数。

到目前为止,这是我的 Vector 类:

这是使用此功能的 lua 脚本:

最后一行产生一个错误,因为它说我无法将用户数据和数字相加。但是,在我的矢量类中,我试图让它只打印正在添加的内容,然后只返回原始数据(以进行测试)。所以我相信我的问题是我如何定义我的元表;在我的矢量类中,从未调用过这两个打印。

0 投票
0 回答
131 浏览

java - LuaJ 覆盖 .new()

我正在尝试用 LuaJ 覆盖 .new() lua 函数(方法?)。我试图在我的表的元表中设置一个“新”键,但是当在 lua 中调用 .new() 时,它被忽略并运行默认的 java 支持的函数,将表创建为 java 对象。

如果我将密钥重命名为(例如)“new2”,并使用“table.new2()”创建它,它就没有问题。

希望有人可以帮助我!

到目前为止的代码:

Lua 测试器:

这样做的原因是我可以将元表应用于自动创建的每个“Vector3”实例,以向用户隐藏内部功能。

0 投票
0 回答
155 浏览

java - LuaJ:将对象引用传递给 lua 代码

我目前正在使用 LuaJ 开发一个项目,这是一个允许 Java 解释 Lua 代码并执行它的库。从我目前收集到的信息来看,我只能传入 Lua 本身可以理解的值,例如原语、表、用户数据等。

我找不到一种方法,例如,通过传入对象引用作为参数来调用 Lua 中定义的函数。

这是有道理的。Lua 无法理解 Java 对象引用,这很公平。

我想出的解决方案本质上是创建一个虚拟内存管理器。在我能想到的最简单的实现中,它本质上是一个Map<Integer,Object>. Integer 位在 Lua 脚本中使用,例如doSomethingWithObject(object),其中 object 实际上是映射中 Integer 键的 LuaValue。

doSomethingWithObject(object)被调用时(这是一个在 Java 中定义的函数,从 扩展而来OneArgFunction),它必须挂接到Map<Integer,Object>,获取由整数值表示的对象并对对象做任何它想做的事情。

这个有味道。我不确定是否有更好的方法来做到这一点。如果有的话,我很想阅读我能得到的任何信息。