为什么会出现“尝试调用全局变量'require'(一个空值)”的错误信息?

我有3个lua文件,Init.lua,FreeCamera.lua和Camera.lua,

init.lua调用require“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“继承”了Camera。 我正在尝试在我的init文件中require FreeCamera,并且我得到了这个:

..\ Content \ Modules \ Core \ Camera \ FreeCamera.lua:12:尝试调用全局'require'(nil值)。 为什么? 我是否正确使用require? 显然它进入了FreeCamera.lua,这非常好,但它卡在下一个require上。

原文链接 https://stackoverflow.com/questions/1725995

点赞
stackoverflow用户107090
stackoverflow用户107090

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

2009-11-12 23:54:11
stackoverflow用户41661
stackoverflow用户41661

为了将标识符导入到一个模块中,你可以编写以下类似的代码:

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 风格。

2009-11-13 05:55:12
stackoverflow用户6444
stackoverflow用户6444

你可以:

lua
module(..., package.seeall)

将全局环境导入到你的模块中。这是(可能)最简单的解决方法,但可能不合你的口味。

2013-04-15 18:13:16