为什么我会"尝试呼叫全球'需要'(零值)"?

Joe*_*Joe 2 lua

我有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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

FreeCamera"继承"相机类.我试图在我的init文件中要求FreeCamera,我得到了这个:

..\Content\Modules\Core\Camera\FreeCamera.lua:12:尝试调用全局'require'(零值).知道为什么?我使用需要正确的方法吗?显然它正在进入FreeCamera.lua,这很棒,但它会陷入下一个需求.

Nor*_*sey 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'
Run Code Online (Sandbox Code Playgroud)

等等.

module(...)命令从全局变量命名空间中删除(几乎)所有内容 - 它创建一个属于新模块的新全局命名空间.除了像_M和的一些特殊标识符之外_G,新的命名空间是空的.但local标识符仍然可见.

local声明使你的模块的依赖关系明确,他们也可以传达你的意图.作为奖励,他们可以更有效地访问命名标识符.所以这是非常好的Lua风格.

  • 完善!我在关于模块功能的评论页面中注意到这一点,我很高兴知道这是好风格!! (2认同)

lhf*_*lhf 7

module函数创建一个新的空环境,因此require在调用时找不到.尝试调用require之前调用module.