Lua面向对象编程之基础结构table简例(面向对象csdn)快来看

随心笔谈2年前发布 admin
197 0 0

文章摘要

这篇文章介绍了面向对象编程(OOP)在Lua语言中的实现,重点说明了以下内容: 1. **对象与函数的定义** - 对象的属性和方法可以通过两种方式定义:一种是直接定义函数(如`person.eat()`),另一种是通过变量引用(如`function person.eat = function() ... end`)。 - 比较了这两种方式的优缺点,强调了函数引用的灵活性和可维护性。 2. **Person表的结构** - 使用Person表实现了简单的对象模型,包含`name`和`age`属性,并定义了`eat()`方法。 - 通过构造函数`Person:new()`创建对象,参数可以是可选的(如`Person:new({weight=100})`)。 3. **元表(metatable)的使用** - 强调了元表在对象引用和属性访问中的作用,特别是当对象属性不明确时,元表能够自动补充相关属性。 - 展示了如何通过元表实现对象的继承功能。 4. **对象的属性与方法访问** - 说明了通过`self`引用对象的方法,并展示了对象属性的修改和继承机制。 - 例如,修改`person1.name`不会影响`person2`,但`person1:eat()`和`person2:eat()`都能正常工作。 5. **继承的实现** - 通过定义`Student`类继承自`Person`,并设置额外属性(如`grade`),展示了类之间的继承关系。 - 通过实例化`stu1`并调用`eat()`方法,验证了继承功能的正确性。 总结而言,文章通过具体的代码示例,详细介绍了Lua中面向对象编程的基本概念和实现方式,特别突出了元表的使用和对象的继承机制。


— Czhenya Lua 面向对象
— 对于一个对象来说, 属性 方法
–[[ 两种定义函数的方式
person.eat=function()
print(person.name..”在写LUA”)
end
function person.eat()
print(person.name..”在写LUA”)
end
–]]
–作为原型
Person={name=’Czhena’,age=22}
function Person:eat()
print(self.name..”的年龄是”..self.age)
end
function Person:new(o) — 若o是空的则返回false
local t=o or {}
–[[ 和下面设置结果一样,只是两种不同的方式
setmetatable{t,self}
self.__index=self
–]]
setmetatable(t,{__index=self}) –设置元表
–调用一个属性的时候,如果t中不存在,就会在__index所指的table中查找
return t
end
— 类似于通过构造函数创建对象
person1=Person:new({weight=100})
person2=Person:new()
print(person1.name)
print(person1.weight)
print(person2.name)
person1.name=”CZY” –不会改变元表,添加到person.name
person1:eat()
person2:eat()
–继承
Student=Person:new()
Student.grade=1
stu1=Student:new()
stu1:eat()
print(stu1.grade)

© 版权声明

相关文章