我有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,这很棒,但是它会在下一个要求中遇到困难。
答案 0 :(得分:12)
要将标识符'导入'到模块中,您可以编写如下代码:
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风格。
答案 1 :(得分:7)
module
函数创建一个新的空环境,因此在调用时找不到require
。在致电require
之前尝试拨打module
。
答案 2 :(得分:0)
你可以:
lua
module(..., package.seeall)
将全局环境导入模块。这(可能)是最简单的解决方案,但可能不符合您的口味。