使用set()而不是require()

时间:2015-07-09 19:10:50

标签: java lua luaj

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

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

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

require 'hyperbolic'

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

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

主要是在初始化时将初始参数传递给双曲线(如新的双曲线(2.4,1.67),因此Lua脚本很简单并且“小孩”友好。

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

1 个答案:

答案 0 :(得分:0)

按照惯例,实现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'),它可能会第二次加载。