Lua学习笔记--面向对象

本文介绍了Lua中的元表和元方法,重点讲解了元表的概念和__index元方法的使用。通过设置元表,Lua可以实现面向对象编程,包括对象的创建、继承等特性。示例代码展示了如何利用__index实现对象的查找和继承行为。
摘要由CSDN通过智能技术生成

一.引言

最近又开始折腾Lua了,说实话以前没有把Lua看成什么高深的语言,一直把他当做是配合宿主程序的所谓的“脚本”(虽然事实的确如此),不过最近看了一些Lua代码才发现,原来Lua可以通过很简单巧妙的变化,模拟出一些其他语言引以为傲的特性,真没想到Lua还可以这样玩,哈哈。

目前主流的编程语言C++/C#/Java都是面向对象的语言,面向对象符合我们正常的思维观念,面向对象的特性,封装,继承等更是可以大大的帮助我们提升编程的效率。比如我们要写一系列的人物对象,每个对象的基础方法都相同,只是有一些特有的方法和字段,如果没有面向对象,我们可能就要“Ctrl+C”,"Ctrl+V"了,这可是写代码的大忌啊。所以机智的先人们早就想好了怎么让Lua面向对象了。

不过在学习怎么让Lua面向对象之前,还要学习一点预备知识,因为这个东东才是让Lua能够面向对象的秘密武器。


二.元表&元方法

1.元表(metatable)简介

    元表是Lua中很重要的一个概念,所谓元表(metatable),就是对应一个类型最基本的一些方法的集合,这些方法叫做元方法(metamethod)。
举个例子来说明一下。比如+方法,我们给两个数进行加法运算,系统就会自己调用数的__Add元方法进行加法操作。我们并没有定义这个方法,
但是Lua会去数的元表里找到_Add进行加法运算。
    Lua中,我们定义一个table时,是不会自动生成元表的。

_G.Base = {}

Base.name = "Base"

function Test()
    print(getmetatable(Base));
end

Test()
结果:

nil

我们可以通过setmetatable方法来给table设置元表。看一个例子:

Set = {}

--创建新的Set
function Set.new(l)
	local set = {}
	for _,v in ipairs(l) do
	set[v] = true
	end
	return set
end

--打印传入的Set
function Set.Print(s)
	for e in pairs(s) do
	print(tostring(e))
	end
end

--Union方法,合并两个Set
function Set.Union(a,b)
	local newSet = {}
	for e in pairs(a) do newSet[e] = true end
	for e in pairs(b) do newSet[e] = true end
	return newSet;
end

s1 = Set.new{1,2,3}
s2 = Set.new{4,5,6}
Set.Print(s1) --输出1,2,3
Set.Print(s2) --输出4,5,6
newS = Set.Union(s1,s2)
Set.Print(newS) --输出1,2,3,4,5,6


	
这是一个合并两个集合的代码,调用方式比较麻烦,有没有类似C+&
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值