首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Luaj / Java: org.luaj.vm2.LuaError:循环或以前的错误加载模块

Luaj / Java: org.luaj.vm2.LuaError:循环或以前的错误加载模块
EN

Stack Overflow用户
提问于 2015-01-22 20:40:10
回答 1查看 2.1K关注 0票数 1

我正在学习Luaj库,并试图在单元测试中实现这个双曲示例:

代码语言:javascript
复制
@Test
public void testHyperbolicLuaScriptExample() throws Exception {
    URL luaScriptUrl = Thread.currentThread().getContextClassLoader().getResource("hyperbolic.lua");
    Assert.assertNotNull(luaScriptUrl);
    String luaScriptUrlPath = luaScriptUrl.getPath();
    File luaScriptFile = new File(luaScriptUrlPath);
    FileInputStream luaScriptFileInputStream = new FileInputStream(luaScriptFile);
    Prototype luaScriptPrototype = LuaC.instance.compile(luaScriptFileInputStream, "");
    Globals luaScriptStandardGlobals = JsePlatform.standardGlobals();
    LuaClosure luaClosure = new LuaClosure(luaScriptPrototype, luaScriptStandardGlobals);
    LuaValue luaValue = luaClosure.call();
}

hyperbolic.java是按照例句构造的

代码语言:javascript
复制
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.*;

public class hyperbolic extends TwoArgFunction {

    public hyperbolic() {}

    public LuaValue call(LuaValue moduleName, LuaValue environment) {
        LuaValue library = tableOf();
        library.set("sinh", new sinh());
        library.set("cosh", new cosh());
        environment.set("com.apple.aide.lua.hyperbolic", library);
        return library;
    }

    static class sinh extends OneArgFunction {
        public LuaValue call(LuaValue x) {
            return LuaValue.valueOf(Math.sinh(x.checkdouble()));
        }
    }

    static class cosh extends OneArgFunction {
        public LuaValue call(LuaValue x) {
            return LuaValue.valueOf(Math.cosh(x.checkdouble()));
        }
    }
}

和in hyberbolic.lua

代码语言:javascript
复制
require 'hyperbolic'

return {"x", hyperbolic.sinh(0.5), "y", hyperbolic.cosh(0.5)}

但是,测试会产生以下错误

代码语言:javascript
复制
org.luaj.vm2.LuaError: @hyperbolic.lua:3 loop or previous error loading module 'hyperbolic'
    at org.luaj.vm2.LuaValue.error(Unknown Source)
    at org.luaj.vm2.lib.PackageLib$require.call(Unknown Source)
    at org.luaj.vm2.LuaClosure.execute(Unknown Source)
    at org.luaj.vm2.LuaClosure.call(Unknown Source)
    at org.luaj.vm2.lib.PackageLib$require.call(Unknown Source)
    at org.luaj.vm2.LuaClosure.execute(Unknown Source)
    at org.luaj.vm2.LuaClosure.call(Unknown Source)
    at com.example.LuaScriptExecutionTest.testHyperbolicLuaScriptExample(LuaScriptExecutionTest.java:52)

这个错误意味着什么?我如何修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 21:54:41

而in hyberbolic.lua (sic,应该是双曲线)

代码语言:javascript
复制
require 'hyperbolic'

您需要一个与发生require的文件同名的模块,这将导致一个循环(这就是错误消息的内容)。只要重命名当前文件(hyperbolic.lua),错误就会消失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28098273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档