【问题标题】:LuaJ hyperbolic library example using set() instead of require()LuaJ 双曲库示例使用 set() 而不是 require()
【发布时间】:2015-09-28 08:18:39
【问题描述】:

我正在使用此处列出的示例:

http://www.luaj.org/luaj/3.0/README.html#5

它工作正常,但不是在 Lua 脚本中使用:

require 'hyperbolic'

我想在 java 代码中使用这个或类似的东西

_G.set("hyperbolic", new hyperbolic());

主要是在初始化时将初始参数传递给双曲线(如 new hyperbolic(2.4, 1.67),因此 Lua 脚本简单且“儿童”友好。

有什么想法或建议吗?谷歌没有帮助,可能是因为我在寻找错误的东西..

【问题讨论】:

    标签: java lua luaj


    【解决方案1】:

    按照惯例,实现 lua 库的 Java 类的实例需要使用参数 (modulename, environment) 调用一次,然后它们会为提供的环境设置库。

    按照编码,双曲线库忽略模块名称,并将其函数放入globals.hyperbolic

    Globals globals = JsePlatform.standardGlobals();
    
    hyperbolic module = new hyperbolic();
    module.call(LuaValue.valueOf("hyperbolic"), globals);
    

    这会加载库,因此您可以使用将这些全局变量作为其环境的脚本中的函数。例如,

    LuaValue chunk = globals.load(
        "print( 'sinh(0.5)', hyperbolic.sinh(0.5) )");
    chunk.call();
    

    然后会输出

    sinh(0.5)   0.5210953
    

    require() 不同,此示例不填充 package.loaded 表,因此如果您继续 require('hyperbolic') em>,它可能会加载第二次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多