LuaJ双曲库示例使用set()而不是require()。

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

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

它很好用,但是我想在Java代码中使用这个或类似的东西,而不是在Lua脚本中使用:

require 'hyperbolic'

我想通过这种方式传递初始参数到hyperbolic(例如在初始化时使用new hyperbolic(2.4, 1.67)),因此Lua脚本简单且“孩子”友好。

有任何建议或想法吗?谷歌没有帮助,可能是因为我搜索了错误的内容..

点赞
用户2556943
用户2556943

按照约定,实现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')**,则可能会再次加载。

2016-01-23 19:52:31