- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在遵循 this tutorial 中的简单 lua 类的示例但尝试将类定义存储在单独的文件中并作为模块加载
我创建了一个名为 List 的简单类,我可以创建一个列表,并填充以下代码(List.lua):
local List = {}
List.__index=List
function List.create(t) -- 2nd version
local list = {}
setmetatable(list, List)
-- self.__index = self
for i=1,#t do list[i] = t[i] end
return list
end
function List.fill(self, x)
for k=1, #self do self[k]=x end
end
return List
要使用它,我只需输入
List = require "List"
a = List.create({1,2,3,4})
print(a) -- {1,2,3,4}
a:fill(a,0)
print(a) -- shows {0,0,0,0}
到目前为止一切顺利。
现在我将把 List 移动到 LuaJ 中的一个包中,这样我就可以在 Java 中实现 List 了。
public class ListLib extends TwoArgFunction {
public LuaValue call(LuaValue modname, LuaValue env) {
LuaTable lib = new LuaTable(0,30);
List.rawset(LuaValue.INDEX, List);
//List.rawset(LuaValue.ADD, new add());
lib.set("create", new create());
lib.set("fill", new fill());
String name = "List";
env.set(name, lib);
env.get("package").get("loaded").set(name, lib);
return lib;
}
static LuaTable List = new LuaTable();
static final class create extends OneArgFunction {
@Override
public LuaValue call(LuaValue arg) {
LuaTable list=new LuaTable();
list.setmetatable(List);
LuaTable in = (LuaTable)arg;
for(int i=1; i<=in.length();i++)
list.set(i, in.get(i));
return list;
}
}
final class fill extends TwoArgFunction {
@Override
public LuaValue call(LuaValue arg1, LuaValue arg2) {
LuaTable self = (LuaTable) arg1;
double x = arg2.checkdouble();
for(int i=1;i<=self.length();i++)
self.set(i, LuaNumber.valueOf(x));
return NONE;
}
}
}
我可以用同样的方式创建列表,但我现在找不到调用对象 a 的 fill 的方法,例如a:fill(0)
不起作用。显示
attempt to call nil
我可以执行List.fill(a, 0)
。这是 LuaJ 的限制吗?还是有其他方法可以使 a:fill(0)
工作?
最佳答案
我犯了一个错误。我创建了一个列表并设置了 __index ,这很好。我还在 ListLib 类开头的调用函数中创建了一个 lib。它返回了lib。我应该做的是:将这两个表合并为一个:List is lib.我这样做之后。现在工作正常。
public class ListLib extends TwoArgFunction {
public LuaValue call(LuaValue modname, LuaValue env) {
List.rawset(LuaValue.INDEX, List);
//List.rawset(LuaValue.ADD, new add());
List.set("create", new create());
List.set("fill", new fill());
String name = "List";
env.set(name, List);
env.get("package").get("loaded").set(name, List);
return List;
}
static LuaTable List = new LuaTable();
...
关于java - LuaJ中lua模块和基于元表的类的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51434550/
我正在学习 Luaj 库,我正在尝试在单元测试中实现双曲示例: @Test public void testHyperbolicLuaScriptExample() throws Exception
我有 Java 类: class SomeClass{ private int i; public SomeClass(int i){ this.i = i; } } 我需要使用 LuaJ
我一直在尝试寻找一种从 LuaJ 中的 Java 方法返回多个值的方法。也就是说,从 Java 返回多个值以在 Lua 代码中检索。 再一次……我的意思是: public LuaValue call(
我正在尝试编译具有两个函数的 Lua 代码,我想调用这两个函数并从中获取一些信息,但是当我在 LuaValue 对象上使用 invokemethod 时,出现此错误 LuaError: attempt
我正在编写一个 Java 程序,它使用 Lua 脚本来确定将什么输出到程序的某些区域。目前,我的代码看起来是这样的: Globals globals = JsePlatform.standardGlo
所以我得到了这个加载 .lua 文件的 java 文件。非常基本,如果我尝试在 Eclipse 中运行它,它就可以工作。 现在,当我将项目编译为可运行的 jar 文件时,它根本不会加载。当您双击它时,
我正在尝试使用 Luaj + java 构建一个 Controller 。我有以下 java 类 public class Duck { public void talk() { System.o
所以使用 LuaJ。 如果我通过,从 Java 到 Lua,用户数据 List与类型 T ,Luaj 仍然允许通过 :add 将任何类型的对象插入到该数组中功能。例如: Java代码: import
我对 Lua 完全陌生。 我有一个非常简单的脚本:“变量 = 1” 我没有找到如何从我的 Java 应用程序中获取此表达式的结果: “var == 3 和 100 或 -1” 我从这个开始: Glob
本文整理了Java中org.luaj.vm2.lib.ZeroArgFunction类的一些代码示例,展示了ZeroArgFunction类的具体用法。这些代码示例主要来源于Github/Stacko
Luaj 中的 os.time() 以毫秒为单位返回时间,但根据 lua 文档,它应该以秒为单位返回时间。 这是Luaj中的错误吗? 你能提出一种适用于 Luaj(for java) 和真正的 Lua
我正在使用 LuaJ 3.0.1,并且在迭代 Lua 脚本中强制 Java 对象中包含的数组时遇到问题。目前,这就是我正在做的事情: 我有一个包含对象数组的 Java 类。类似的东西 public c
我打算将 Lua 集成到我的 java 应用程序中。您能否谈谈在 LuaJ 与纯 Java 中实现脚本之间的性能比较。还有其他性能更好的替代方案吗? 最佳答案 Lua 使用 JIT 的速度非常快由 L
我正在使用 LuaJ,并且我有一个包含大量函数的 .lua 文件。我如何导入这些函数以在带有 LuaJ 的 Java 中使用? 最佳答案 一个选择是将文件编译成 Java 代码并导入它。另一种方法是使
在我的代码中,我需要将一个 int 插入 Lua 的堆栈中。我知道 C 的 lua_pushnumber,但是 LuaJ 中会使用什么?鉴于 LuaJ 不清楚哪些函数代表某些 C 函数,我找不到它的函
我有一个 Java 类,其中包含一个名为 test 的方法: public class MyClass() { public String test() { //Do Some
我正在试验一种游戏机制,让玩家可以在游戏内计算机上运行脚本。脚本执行将在游戏级别上受到资源限制,每刻指令数量有限。 以下概念验证演示了基本级别的沙盒和任意用户代码的限制。它成功地运行了约 250 条制
我正在使用 LuaJ 在 Java 中运行用户创建的 Lua 脚本。但是,运行永不返回的 Lua 脚本会导致 Java 线程卡住。这也使线程不可中断。我运行 Lua 脚本: JsePlatform.s
在 Java 中 LuaJ library我想知道如何在另一个由 lua 闭包通过 Java 调用的 lua 脚本中要求或导入函数的 lua 脚本。例如,这不起作用: public static Lu
我很有可能正在做一些导致此错误的奇怪事情。 以下简单示例失败: --> thingy.lua function doThing() print( "Thing has been done." );
我是一名优秀的程序员,十分优秀!