使用Luarocks,我已经按照Creating a rock上的教程进行了操作。但是,我在创建包含多个文件的包的摇滚时遇到了困难。当我的包分布在多个文件中时,我需要做什么不同的教程呢?
说我有以下文件testrock.lua
:
module('testrock')
function add(a, b)
return a+b
end
并在testrock-scm-1.rockspec
package = "testrock"
version = "scm-1"
source = ...
description = ...
dependencies = ...
build = {
type = "builtin",
modules = {
testrock = "testrock.lua"
}
}
然后我运行luarocks make
并安装testrock
就好了(我可以转到另一个目录并运行require 'testrock'
)。
但是,假设我要添加另一个文件foo.lua
:
function testrock.sub(a, b)
return a - b
end
我将以下内容添加到testrock.lua
:
require('foo')
并运行luarocks make
。 make
有效,但是当我转到另一个目录并运行`require'testrock``时,我收到以下错误:
/home/<username>/torch/install/share/lua/5.1/testrock.lua:7: attempt to call global 'require' (a nil value)
所以它抱怨require('foo')
声明。有什么建议吗?
答案 0 :(得分:3)
对module('testrock')
的调用隐藏了所有全局变量,包括全局require
函数。您可以在致电require
之前致电module
,或在致电local require = require
之前创建本地别名(module
),或使用Updated Example选项(module('testrock', package.seeall)
)。
将foo模块添加到rockspec中,以便它与testrock.lua
文件一起安装,非常简单:
-- ...
build = {
type = "builtin",
modules = {
testrock = "testrock.lua",
foo = "foo.lua"
}
}
-- ...
答案 1 :(得分:2)
解决方案随之意识到我不需要构建任何东西,因为我只使用.lua文件。因此,以下rockspec有效:
testrock.lua
这会将foo.lua
和/home/<username>/torch/install/share/lua/5.1/
复制到ChildView = Backbone.Marionette.ItemView.extend({
send_message: function(){
this.model.collection.trigger('some-message');
}
})
ParentCollectionView = Backbone.Marionette.CollectionView.extend({
// ON RENDER
onRender: function(){
this.listenTo(this.collection, 'some-message', this.do_something);
}
// DO SOMETHING
do_something: function(){
alert('did something');
}
});
。