lua面向对象详解(1)

来源:互联网 发布:阿里云研发中心 编辑:程序博客网 时间:2024/04/27 14:38

项目组有个很好的习惯,每个礼拜都开展技术交流活动,要求由其中一个同事作为主讲人,以该主讲人所擅长的技术方面为主题,进行交流。收到这个任务已经月余,但最近实在太忙,只得趁周末准备一下。学习lua已经是很久远的事情了,虽然每天都在运用,而且应该说运用上还是挺溜的,但毕竟运用自如与以简易明了的语言表达出来还是差距挺大,有些东西虽然理解但要表达出来还是挺有难度,再加上时间紧迫,这里就当时抛砖引玉吧,希望大牛们多多指点,有纰漏不对之处,还请指正。

本人认为,要了解lua的面向对象,需要从三个方面下手:table、元表与元方法、面向对象。

一、lua的table

讲到lua的面向对象,则首先就要了解一下lua中的table。

table是什么?

table是lua中的数据结构机制,用table来实现关联数组,可以表示普通数组、符号表、集合、记录、队列及其他数据结构,也可以来表示模块、包、对象。

如:

localt1 = {1,3,5,7,9}  表示5个数字元素的数组

localtt = {'a','b','c','d'}

fork,v in pairs(tt) do

   print(k,v)

end

可以看到打印为

1   a

2   b

3   c

4   d

其中for k,v in pairs(tt) do 表示循环变量tt中的元素,pairs为一种table迭代器,返回元素的键和值。可知,默认情况下(即不指定键的情况下)table的索引是从1开始的(这和c++的数组下标从0开始有很大区别),且会自动递增,对于没有初始化的元素,索引结构都为nil。所以,lua将nil作为界定数组结尾的标志。

localt1 = {1,2,3,4,5,6}

t1[4]= nil

fork,v in ipairs(t1) do

    print(k,v)

end

输出为

1   1

2   2

3   3

虽然存在t1[5] = 5 和 t1[6] = 6 两个元素,但t1[4]为nil,则lua认为这个数组到索引3就结束了,但用户仍可用t1[5]去索引访问这个元素。

ipairs与pairs类似,但ipairs为从下标1开始依次递增索引数字索引的数组的迭代器。pairs则会无序索引table中的所有元素,包括字符索引和函数等。

localt2 = {1,2,abc = 5,4}

fork,v in ipairs(t2) do

   print(k , v)

end

输出为

1   1

2   2

3   4

中间虽然有一个字符串索引“abc”,但是后面的没有指定索引的元素会继续递增数字索引。

table中可以存储值(数字,字符串等)、函数(地址),也可以存储table。

table 既不是值,也不是变量,而是对象。请记住这句非常重要的话!

初步了解了table之后,不继续深入讲解,进入下一个阶段,毕竟这里主要讲的是lua的面向对象。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾驶证到期本人在监狱服刑怎么办 轻伤过了追诉期怎么办 判决生效书丢了怎么办 高层17楼水压低怎么办 高层六楼水压低怎么办 高层6楼水压低怎么办 高层5楼水压低怎么办 高层五楼水压小怎么办 高层四楼水压低怎么办 高层6楼水压不够怎么办 马桶水箱盖坏了怎么办 马桶水箱盖子坏了怎么办 绿萝的叶子黄了怎么办 绿萝叶子烂了怎么办 还款协议签订后一方反悔怎么办 签了协议想反悔怎么办 体温计打碎了水银找不到了怎么办 模拟城市5核电站爆炸怎么办 日本地铁票丢了怎么办 在日本地铁票丢了怎么办 首付交了没合同怎么办 工程干完不给签合同怎么办 寄存密码纸丢了怎么办 超市柜子纸丢了怎么办 楼下有污水井味道怎么办 孕妇闻到了烧垃圾怎么办 楼下9米垃圾房怎么办 在工厂上班得了职业病怎么办 自来水被农药水污染了怎么办 雾霾天头疼恶心怎么办? 夫妻住宾馆一个没有身份证怎么办 医保报销后认定工伤怎么办 结肠癌术后复查有息肉怎么办 无蒂息肉恶变要怎么办 贤者时间很长怎么办 鸡吃了酒米醉了怎么办 自填脂肪乳房脂肪液化怎么办 中国人在外国遇到危险怎么办 dnf刷图卡住了怎么办 dbf深渊怪卡住了怎么办 dnf86级没任务了怎么办