标签:lua
创建 | complex = {} function complex.new() ...end complex.i = complex.new(0, 1) ... return complex |
注意点 | 首先,我们对每一个函数定义都必须显示的在前面加上包的名称。 第二,同一包内的函数相互调用必须在被调用函数前指定包名。 第三,这个return语句并非必需的,因为package已经赋值给全局变量complex了。但是,我们认为package打开的时候返回本身是一个很好的习惯。 |
另一种创建方法 | 可以增加私有函数 local function a() 注意,没有complex.a 同时,可以修改为使用局部的表 local P = {}
complex = P
functionP.new() ...end P.i =P.new(0, 1)
... return P |
创建 |
local function new() ...end
local i =new(0, 1) ... complex = { new = new, i = i ... } --函数映射,local的new变成complex.new
return complex |
3.1 | local P = {} complex = P setfenv(1, P) --将全局环境表注册为package的名字 function add (c1, c2) --add 自动变成complex.add return new(c1.r + c2.r, c1.i + c2.i) end |
3.2 | 以上的问题:P作为我们的环境,我们就失去了访问所有以前的全局变量。下面有好几种方法可以解决这个问题,但都各有利弊。 使用继承 local P = {} setmetatable(P, {__index = _G}) setfenv(1, P) |
3.3 | 声明一个局部变量保存老的环境 local P = {} pack = P local _G = _G setfenv(1, P) 现在,你必须对外部的访问加上前缀_G.,但是访问速度更快,因为这不涉及到metamethod。 |
3.4 | 只把你需要的函数或者packages声明为local local P = {} pack = P local sqrt = math.sqrt local io = io setfenv(1, P) |
标签:lua
原文地址:http://blog.csdn.net/peerlessbloom/article/details/44081153