lua面向对象编程之点号与冒号的差异详细比较

首先,先来一段在lua创建一个类与对象的代码     Class = {} Class.__index = Class function Class:new(x,y) local temp = {} setmetatable(temp, Class) temp.x = x temp.y = y return temp end function Class:test() print(self.x,self.y) end object = Class.new(10,20) object:test() 猜一下会输出什么结果呢? 输出: >lua -e “io.stdout:setvbuf ‘no’” “object.lua” 20    nil >Exit code: 0 我们的y值怎么没了? 这个原因很简单,因为我们创建一个对象的时候使用了一个 . 号 在lua程序设计第二版中,有提到当一项操作所作用的”接受者”,需要一个额外的参数来表示该接受者,这个参数通常称为self或this 然后我们在这段代码加上 self C

查看更多

Lua中的元表和元方法

Lua中每个值都可具有元表。 元表是普通的Lua表,定义了原始值在某些特定操作下的行为。你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征。例如,当数字值 作为加法的操作数时,Lua检查其元表中的”__add”字段是否有个函数。如果有,Lua调用它执行加法。 我们称元表中的键为事件(event),称值为元方法(metamethod)。前述例子中的事件是”add”,元方法是执行加法的函数。 可通过函数getmetatable查询任何值的元表。 可通过函数setmetatable替换表的元表。不能从Lua中改变其他类型的元表(除了使用调试库);必须使用C API才能做到。 表和完整的用户数据具有独立的元表(尽管多个表和用户数据可共享元表);每种其他类型的所有值共享一个元表。所以,所有数字共享一个元表,字符串也是,等等。 元表可以控制对象的数学运算、顺序比较、连接、取长、和索引操作的行为。元表也能定义用户数据被垃圾收集时调用的函数。Lua给这些操作的每一个都 关联了称为事件的特定键。当Lua对某值执行其中一个操作时,检查该值

查看更多

lua文件处理

一、文件读存: — 似乎不支持大文件(不能超过9k?) function FileSaveLoad() local file = io.open(“c:\\in.lua”, “r”); assert(file); local data = file:read(“*a”); — 读取所有内容 file:close(); file = io.open(“c:\\out.lua”, “w”); assert(file); file:write(data); file:close(); end FileSaveLoad(); 二、非循环表格处理: HERO = 1; MONSTER = 2; BUILDING = 3; SUMUNIT = 4; cha = {}; cha[1] = { basic = { Name = “农民”,    –NPC名字 cha_type = HERO,  –NPC模型 },

查看更多

Lua中的数学库

Lua5.1中数学库的所有函数如下表: math.pi 为圆周率常量 = 3.14159265358979323846 abs 取绝对值 math.abs(-15) 15 acos 反余弦函数 math.acos(0.5) 1.04719755 asin 反正弦函数 math.asin(0.5) 0.52359877 atan2 x / y的反正切值 math.atan2(90.0, 45.0) 1.10714871 atan 反正切函数 math.atan(0.5) 0.463647609 ceil 不小于x的最大整数 math.ceil(5.8) 6 cosh 双曲线余弦函数 math.cosh(0.5) 1.276259652 cos 余弦函数 math.cos(0.5) 0.87758256 deg 弧度转角度 math.deg(math.pi) 180 exp 计算以e为底x次方值 math.exp(2) 2.718281828 floor 不大于x的最大整数 math.floor(5.6) 5 fmod (mod) 取模运算 math.mod(14, 5) 4 frexp

查看更多

Lua中的操作系统库

这个库通过表os实现 os.clock () 功能:返回一个程序使用CPU时间的一个近似值 例如: local x = os.clock(); print(os.clock()) local s = 0; for i = 1, 100000000 do s = s + i; end print(string.format(“elapsed time : %.2f\n”, os.clock() – x)); 输出: 0 elapsed time : 2.55 ——————————————————————————– os.date ([format [, time]]) 功能:返回一个按format格式化日期、时间的字串或表 若设置ti

查看更多

Lua中的table函数库

一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长. sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数, 但如果要指定靠后的参数, 必须同时指定前面的参数. > tbl = {“first”, “second”, “third”} > print(table.concat(tbl, “:”)) first:second:third > print(table.concat(tbl,

查看更多