Lua学习笔记——进阶

Lua进阶

关于变量的作用域:
	多个Lua文件中变量默认是可以共用的(变量前面默认有  _G. 表示全局 )
	Lua脚本中的变量是申请在Lua解析器中的,多个Lua脚本的全局变量申请空间都是在Lua解析器中

	local 关键字 加在变量申请之前 表示变量只在变量所在的代码块中可以访问
		代码块:包裹在有end关键字结尾的代码内部的区间
	
	注意:在代码块内部如果不加local 变量仍然是全局的。	
		
001.  dofile()   函数
	在test2.lua中调用test1.lua   dofile(test1.lua)      //游戏中砍一刀,就调用一次dofile;不用停下来全部文件更新  (不会改变的逻辑代码用C来写,经常需要更新的用Lua脚本语言来写)

002. require("test1")    与dofile类似,区别是:require相当于加载,多次加载只有第一次会执行,类似有防止头文件重复包含;dofile相当于执行一次Lua脚本,多次调用都会生效



003 闭包,函数类型变量的定义
	function func1()
		local function func2()                     //闭包作用:定义类似private类型的变量,函数类比C++的类
			print("func2 is called")
		end
		func2()
	end
	
	func1()
	func2()  //如果func2 前面不加local ,外部调用过func1之后,就可以调用func2了
	
	
004 Lua中的类   利用setmetatable实现
	animal = {}
	animal.foot_count = 4
	
	dog = {}
	duck = {}
	
	setmetatable(dog,{__index = animal})             相当于指定dog是animal的子类,   __index是一个metatable中的变量   还有一个 __newindex可以用来改变父类的值。
	setmetatable(duck,{__index = animal})
	
	//当对duck 的 foot_count 进行赋值的时候,因为duck本身并没有这个foot_count 所以会在animal中寻找这个foot_count变量
	duck.foot_count =2
	此时dog.foot_count = 4
	duck.foot_count =2
	
	
005	利用setmetatable实现俩table相加
	point = {}
	point.x = 1
	point.y = 2
	
	point1={}
	point.x = 100
	point.y = 200
	
	mt = {__add = function(a,b) local t ={};t.x = a.x+b.x;t.y = a.y+b.y; return t ;end}
	setmetatable(point ,mt)          //为point添加+属性
	
	point2 = point + point2     //类似C++的操作符重载,但是不同的是Lua不需要将+运算放到第一个操作数的成员函数中,而是任何一个操作数只要有一个有+运算就可以
	
006 setmetatable还有__eq   __le等固定的元方法  可用于重载	
	setmetatable(point ,{__add =addfunc,__eq = isEqual})         //配合外部定义的addfunc     isEqual函数完成重载运算
	
	
	
	
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值