LUA面向对象浅析

--表 元表 元方法结合起来可以实现lua面向对象的机制
--lua中通过原型的思路才使用实现对象的实例化机制
--一个原型表可以用来描述一个类 在原型表中填写属性和方法
--实例化对象,创建一个新表,将新表的元表设置为原型表.将原型表的__index指向自身


--类似js的面向对象机制

function Human(name)

 local this={ name=name, a=1, b=2, c=3, d=4 } 
 this.eat=function(food) 
  print(this.name.." eats "..food) 
 end 
 
 this.add=function(n) 
  this.a,this.b,this.c,this.d=this.a+n,this.b+n,this.c+n,this.d+n 
 end 
 
 this.getName=function() 
  print("my name is "..this.name) 
 end 
 
 this.print=function() 
  print(this.a,this.b,this.c,this.d) 
 end 
 
 return this
 
end 
 
a=Human("Hover")
b=Human("Lees")
a.eat("meat bun")
b.eat("sweet bun")
a.add(1)
b.add(2)
a.getName()
a.print()
b.getName()
b.print()

--[[
my name is Hover
2     3    4     5
my name is Lees
3     4    5     6
]]


 

--LUA中内置的面向对象的机制

Set={}
local mt={}
function Set.new(l)
	local set={}
	setmetatable(set,mt)--设置对象的元表 之后通过对元表的操作来使对象具有其他的操作行为
	for _,v in ipairs(l) do
		set[v]=true
	end
	return set
end

function Set.union(a,b)
	local res=Set.new{}
	for k in pairs(a) do
		res[k]=true
	end
	
	for k in pairs(b) do
		res[k]=true 
	end
	
	return res
end


function Set.intersection(a,b)
	local res=Set.new{}
	for k in pairs(a) do
		res[k]=b[k]
	end
	return res
end

function Set.tostring(set)
	local l={}
	for e in pairs(set) do
		l[#l+1]=e
	end
	return "{"..table.concat(l,",").."}"
end

function Set.print(s)
	print(Set.tostring(s))
end


s1=Set.new{10,20,30,40}
s2=Set.new{10,50}
print(Set.print(Set.union(s1,s2)))

结果为:{20,10,40,30,50}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值