我有3个lua文件,Init.lua,FreeCamera.lua和Camera.lua,
init.lua调用需要"Core.Camera.FreeCamera"
免费相机:
module(...) require "Core.Camera.Camera" local M = {} FreeCamera = M M = Class( Camera ) function M:__constructor(x,y,z) self.Active = false self.x = x self.y = y self.z = z end
和
module(...) local M = {} Camera = M M = Class() function M:__constructor(x,y,z) self.Active = false self.x = x self.y = y self.z = z end
FreeCamera"继承"相机类.我试图在我的init文件中要求FreeCamera,我得到了这个:
..\Content\Modules\Core\Camera\FreeCamera.lua:12:尝试调用全局'require'(零值).知道为什么?我使用需要正确的方法吗?显然它正在进入FreeCamera.lua,这很棒,但它会陷入下一个需求.
要将标识符"导入"模块,您可以编写如下代码:
local require = require local Class = Class local io, table, string = io, table, string local type, pairs, ipairs, assert = type, pairs, ipairs, assert module(...) local Camera = require 'Core.Camera.Camera'
等等.
该module(...)
命令从全局变量命名空间中删除(几乎)所有内容 - 它创建一个属于新模块的新全局命名空间.除了像_M
和的一些特殊标识符之外_G
,新的命名空间是空的.但local
标识符仍然可见.
该local
声明使你的模块的依赖关系明确,他们也可以传达你的意图.作为奖励,他们可以更有效地访问命名标识符.所以这是非常好的Lua风格.
该module
函数创建一个新的空环境,因此require
在调用时找不到.尝试调用require
之前调用module
.