当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么我会"尝试呼叫全球'需要'(零值)"?》经验,为你挑选了2个好方法。

我有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,这很棒,但它会陷入下一个需求.



1> Norman Ramse..:

要将标识符"导入"模块,您可以编写如下代码:

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


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

2> lhf..:

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

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有