- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Java 类,其中包含一个名为 test 的方法:
public class MyClass() {
public String test() {
//Do Something
}
}
然后,我想在我的 Lua 脚本中调用测试方法。为了做到这一点,我做了:
Globals globals = JsePlatform.standartGlobals();
LuaValue test = CoerceJavaToLua.coerce(new MyClass());
globals.set("obj", test);
LuaValue chunk = globals.load("obj.test()");
chunk.call();
当调用 Lua 脚本时,我得到一个 bad argument 错误。
它仅在我使用“obj:test()”时有效。
好像我应该在第一个参数中传递对象。
有没有办法让“obj.test()”起作用?
最佳答案
我找不到任何绑定(bind)类的静态函数并在没有类实例的情况下调用它的示例。任何地方的所有示例,甚至在使用静态函数时,都会传递对象的实例。因此我不能 100% 确定这是不可能的(不编辑 luaj)。
库和示例中的任何静态函数实际上都是通过创建虚拟类创建的,例如参见此处 http://luaj.cvs.sourceforge.net/viewvc/luaj/luaj-vm/examples/jse/hyperbolic.java?view=markup
仔细查看 luaj 源代码会发现 luaj 不区分类中的静态函数和非静态函数,这意味着所有函数都作为非静态函数处理。有关更多信息,请参见 JavaClass.java
getMethod
函数。
这是一个相当简单的例子,你可以如何完成你想要的,但遗憾的是它不需要静态方法。
package luaj;
import org.luaj.vm2.*;
import org.luaj.vm2.lib.*;
import org.luaj.vm2.lib.jse.*;
public class luaj {
static final public class MyClass {
public static int asd = 5;
static public class Test extends ZeroArgFunction {
@Override
public LuaValue call() {
System.out.println("Worked");
return NIL;
}
}
}
public static void main(String[] args) {
Globals globals = JsePlatform.standardGlobals();
LuaValue test = CoerceJavaToLua.coerce(new MyClass());
globals.set("obj", test);
LuaTable t = new LuaTable();
t.set("test", new MyClass.Test());
t.set("__index", t);
test.setmetatable(t);
LuaValue chunk = globals.load("print('Testing', obj.asd) obj.test()");
chunk.call();
}
}
通过将 obj.test
设置为包装真实 obj.test
的函数并传递一个新实例,可以使用静态方法来实现类似的方法MyClass
从而“隐藏”实例的传递。
关于java - LuaJ - 调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34665003/
我正在学习 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." );
我是一名优秀的程序员,十分优秀!