lua面向对象详解(1)
2013-12-01 22:20
344 查看
项目组有个很好的习惯,每个礼拜都开展技术交流活动,要求由其中一个同事作为主讲人,以该主讲人所擅长的技术方面为主题,进行交流。收到这个任务已经月余,但最近实在太忙,只得趁周末准备一下。学习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的面向对象。
本人认为,要了解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的面向对象。
相关文章推荐
- lua面向对象详解(3)
- Lua面向对象详解
- lua面向对象详解(1)
- lua面向对象详解(2)
- lua面向对象实现的(记)
- lua中的面向对象模拟,类,继承,多态
- Lua学习笔记(五):面向对象的实现
- lua 类, 继承, 面向对象再次理解
- JAVA面向对象知识点详解
- Java学习系列(六)Java面向对象之Jar命令、正则表达式、国际化详解
- lua--面向对象使用middleclass
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- java面向对象中四种权限(private,protected,public,友好型)详解
- Lua --面向对象之多态
- JAVA面向对象特征详解
- 在 slua 中使用更新的面向对象方案
- Lua面向对象实现
- java面向对象之main方法详解
- java面向对象中四种权限(private,protected,public,友好型)详解
- java面向对象详解