Lua中默认是没有面向对象的,需要靠我们自己实现
成员变量 成员函数
Student = {
age = 18,
sex = true,
Up = function ()
print('长大了')
end
}
Lua中类的表现更像是一个类中包含有很多的静态变量和函数
print(Student.age)
Student.Up()
在声明表后,可以在表外去声明表有的变量和方法
表内是没有name这个属性的,我们在表外给它添加了
Student.name= '少年'
--表外加函数有两种写法
--方法1
Student.play = function()
print('打游戏')
end
--方法2
function Student.play2()
print('打游戏2')
end
print(Student.name)
Student.play()
Student.play2()
注意,作用域
函数中的page和表中的page没有半毛钱关系,它是一个全局变量
Teacher = {
page = 30
teach=function()
print('大家翻到'..page..'页')
end
}
改写
想要在表内部函数中 调用表本身的属性或者方法
一定要指定是谁的 所以要使用 表名.属性 或者表名.方法
Teacher = {
page = 30,
Teach=function()
print('大家把书翻到'..Teacher.page..'页')
end
}
--Teacher.teach()
print(Teacher.page)
Teacher.Teach()
还有一种方法
在函数内部调用自己的属性或者方法的方法
就是把自己作为一个参数传进来,在内部访问
Lua中点和冒号的区别
用点的时候,有什么参数就要传什么参数
用冒号调用方法的时候,会默认把调用者作为第一个参数传入
Teacher = {
page = 30,
Teach=function()
print('大家把书翻到'..Teacher.page..'页')
end ,
Learn = function(t)
print(t.page)
print('好好学习')
end
}
Teacher.Learn(Teacher)
Teacher:Learn()
注意
搞Lua要很细心,我这个逗号忘了,害我一直报错
lua中有一个关键字 self 表示 默认传入的第一个参数
Student ={
age=20,
}
function Student:Speak()
print('年龄'..self.age)
end
Student:Speak()