笨木头花心贡献,哈?花心?不,是用心~
转载请注明,原文地址:http://www.benmutou.com/archives/1786
文章来源:笨木头与游戏开发
[cce_lua] game = {}我们定义了一个table,并且给这个table加了两个字段,只不过这两个字段的值是函数而已。
function game.play() print("那么,开始吧"); end
function game.quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end
return game; [/cce_lua]
[cce_lua] local function main() cc.FileUtils:getInstance():addSearchPath("src")注意,我们要require其他文件的时候,要把文件路径给设置好,否则会找不到文件。
game = require("game"); game.play();
end [/cce_lua]
[cce_lua] game = {}我们用一个局部变量M来代替了game,于是,以后我们只需要修改前面两个的game就可以了,函数部分的内容完全不需要去修改。
local M = game;
function M.play() print("那么,开始吧"); end
function M.quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end
return M; [/cce_lua]
[cce_lua] local M = {};留意一下,这里有一个 local modelName = ...
local modelName = ...; _G[modelName] = M;
function M.play() print("那么,开始吧"); end
function M.quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end
return M; [/cce_lua]
[cce_lua] local M = {};我们把game.lua这个模块里的全局环境设置为M,于是,我们直接定义函数的时候,不需要再带M前缀。
local modelName = ...; _G[modelName] = M;
setfenv(1, M);
function play() print("那么,开始吧"); end
function quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end
return M; [/cce_lua]
[cce_lua] local M = {};没错,使用__index元方法就能解决这个问题了,当找不到print等函数时,就会去原来的_G里查找。
local modelName = ...; _G[modelName] = M;
-- 方法1:使用继承 setmetatable(M, {__index = _G});
setfenv(1, M);
function play() print("那么,开始吧"); end
function quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end
return M; [/cce_lua]
[cce_lua] local M = {};这种方法的缺点比较明显,那就是,每次调用print等函数时,都要使用_G前缀。
local modelName = ...; _G[modelName] = M;
-- 方法2:使用局部变量保存_G local _G = _G;
setfenv(1, M);
function play() _G.print("那么,开始吧"); end
function quit() _G.print("你走吧,我保证你不会出事的,呵,呵呵"); end
return M; [/cce_lua]
[cce_lua] local M = {};这种方法的缺点更明显了,所有用到的模块都要用局部变量声明一次,烦人。
local modelName = ...; _G[modelName] = M;
-- 方法3:保存需要使用到的模块 local print = print;
setfenv(1, M);
function play() print("那么,开始吧"); end
function quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end
return M; [/cce_lua]
[cce_lua] local M = {};就这几句代码,其实我们可以忽略不写,因为,我们有module函数,它的功能就相当于写了这些代码。
local modelName = ...; _G[modelName] = M; setmetatable(M, {__index = _G}); setfenv(1, M); [/cce_lua]
[cce_lua] module(..., package.seeall);注意,前面的几行代码都没了,只留下了一个module函数的调用。
function play() print("那么,开始吧"); end
function quit() print("你走吧,我保证你不会出事的,呵,呵呵"); end [/cce_lua]