经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Lua » 查看文章
Lua面向对象编程之基础结构table简例
来源:jb51  时间:2018/10/26 9:46:16  对本文有异议

面向对象编程

(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。

Lua中最基本的结构是table,所以需要用table来描述对象的属性。

Lua中的function可以用来表示方法。那么Lua中的类可以通过table + function模拟出来。

简例:

  1. -- Czhenya Lua 面向对象
  2. -- 对于一个对象来说, 属性 方法
  3. --[[ 两种定义函数的方式
  4. person.eat = function()
  5. print(person.name.."在写LUA")
  6. end
  7. function person.eat()
  8. print(person.name.."在写LUA")
  9. end
  10. --]]
  11. --作为原型
  12. Person = {name = 'Czhena',age = 22}
  13. function Person:eat()
  14. print(self.name.."的年龄是"..self.age)
  15. end
  16. function Person:new(o) -- o是空的则返回false
  17. local t = o or {}
  18. --[[ 和下面设置结果一样,只是两种不同的方式
  19. setmetatable{t,self}
  20. self.__index=self
  21. --]]
  22. setmetatable(t,{__index = self}) --设置元表
  23. --调用一个属性的时候,如果t中不存在,就会在__index所指的table中查找
  24. return t
  25. end
  26. -- 类似于通过构造函数创建对象
  27. person1 = Person:new({weight = 100})
  28. person2 = Person:new()
  29. print(person1.name)
  30. print(person1.weight)
  31. print(person2.name)
  32. person1.name = "CZY" --不会改变元表,添加到person.name
  33. person1:eat()
  34. person2:eat()
  35. --继承
  36. Student = Person:new()
  37. Student.grade = 1
  38. stu1 = Student:new()
  39. stu1:eat()
  40. print(stu1.grade)

冒号和点定义函数的区别:

  1. -- 使用冒号和点来的定义函数,建议用什么定义函数,用什么调用
  2. person = {name="Czhenya",age=22}
  3. function person:eat()
  4. print(self.name.."的年龄是"..self.age)
  5. end
  6. person.eat(person)
  7. a = person
  8. --冒号调用self自动赋值
  9. a:eat()
  10. --通过点来调用的时候,self不会自动赋值,必须通过参数传递
  11. a.eat(a)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。如果你想了解更多相关内容请查看下面相关链接

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号