pourquoi suis-je “tentative d'appel global 'require' (a nil value)”?
J'ai 3 fichiers lua, Init.lua, FreeCamera.lua et de la Caméra.lua ,
init.lua appels d'exiger "de Base.De la caméra.FreeCamera"
Caméra Libre:
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
et
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 "hérite" de la Caméra de sorte de. Je suis en train d'exiger FreeCamera dans mon fichier init et j'obtiens ceci:
..\Content\Modules\Core\Camera\FreeCamera.lua:12: tentative d'appel global 'require' (a nil value). Aucune idée Pourquoi? Suis-je à l'aide de besoin de la bonne façon?
Clairement, c'est d'entrer dans l'FreeCamera.lua, ce qui est excellent, mais il reste coincé sur le prochain besoin.
Vous devez vous connecter pour publier un commentaire.
À "importer" des identificateurs dans un module, vous pouvez écrire le code quelque chose comme ce qui suit:
et ainsi de suite.
La
module(...)
commande supprime les (presque) tout à partir de votre mondiale-variable de l'espace de noms, il crée un nouvel espace de noms global auquel appartient le nouveau module. Mis à part un couple de spécial identifiants comme_M
et_G
, le nouvel espace de noms est vide. Maislocal
identifiants restent visibles.La
local
déclarations des dépendances de votre module clair, et ils peuvent également communiquer votre intention. En prime, ils font de l'accès à l'nommé identificateurs plus efficace. C'est donc une très bonne Lua style.La
module
fonction crée un environnement vide et doncrequire
n'est pas trouvé lors de l'appel. Essayez d'appelerrequire
avant d'appelermodule
.Vous pouvez:
lua
module(..., package.seeall)
À l'importation de l'environnement mondial dans votre module. C'est (probablement) la solution la plus simple, mais peut-être pas à votre goût.
module()
la fonction et l'utilisationlocal
généreusement. Notez que dans Lua 5.2, la fonctionmodule()
est déconseillé, par exemple.