Lua面向对象编程之基础结构table简例

柯里薄雾
• 阅读 116

面向对象编程

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

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

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

简例:

-- 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)

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

-- 使用冒号和点来的定义函数,建议用什么定义函数,用什么调用
person = {name="Czhenya",age=22}
function person:eat()
  print(self.name.."的年龄是"..self.age)
end
person.eat(person)
a = person
--冒号调用self自动赋值
a:eat()
--通过点来调用的时候,self不会自动赋值,必须通过参数传递
a.eat(a)
点赞
收藏
评论区
推荐文章
菜园前端 菜园前端
2年前
什么是面向对象编程?
原文链接:什么是面向对象编程?面向对象程序设计(ObjectOrientedProgramming,OOP)是一种计算机编程架构,也可以理解为是一种编程的思想。面向对象程序设计的核心就是对象和类,对象也是类的实例化,类是对现实对象的抽象。对象间通过消息传递
Stella981 Stella981
3年前
C++下LuaPB协议升级
使用LuaTable解码编码PB协议,效率比较低,主要是因为需要lua内部字符串比较和跨lua和c之间的Int解码操作,比较消耗如果从C部分,直接访问lua虚拟机内部的Table数据结构,以及使用lua字符串自带的hash值,来做比较,效率会有比较大提升例如原始需要5000ms处理编码一个Luatable为PB,在纯C
Wesley13 Wesley13
3年前
lua中的table
1、table是lua中最重要的数据类型。2、table类似于python中的字典。3、table只能通过构造式来创建例1:Lua代码 mytable{a10,b11,c20,ddd30} print(mytable\"a"\) 
Stella981 Stella981
3年前
Lua基础(对象)
:和.区别.   stu{id100,name"Tom",age21}成员变量   function stu.toString()成员函数    return stu.id .. stu.name .. stu.age   endprint(stu
Stella981 Stella981
3年前
Lua Table 引用, 拷贝
   lua除了简单类型分配内存外,table只是传递引用,所以不能用简单的""来copy两个表,并试图修改一个表中的值。tb  {}tb.a  11tb.b  22tb_ref  tbfunction p(tip)  print("
Stella981 Stella981
3年前
Lua中table的实现
本文来自《Lua设计与实现》的阅读笔记,推荐Lua学习者可以购买一本,深入浅出讲解lua的设计和实现原理,很赞,哈哈Lua中对于表的设计,是基于数组和散列表,和其他语言不同,对于数组的下标是从1开始的,对于散列表而言,只要其键值补位nil,都可以存储在其中。一、table的基本类型定义首先看看table的数据定义,参考源码lobject.
Stella981 Stella981
3年前
Javascript 面向对象编程
Javascript面向对象编程(一):封装Javascript是一种基于对象(objectbased)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。那么,如果我们要把"属性
小万哥 小万哥
1年前
C# 面向对象编程解析:优势、类和对象、类成员详解
C什么是面向对象编程?OOP代表面向对象编程。过程式编程涉及编写执行数据操作的过程或方法,而面向对象编程涉及创建包含数据和方法的对象。面向对象编程相对于过程式编程具有几个优势:OOP执行速度更快,更容易执行OOP为程序提供了清晰的结构OOP有助于保持C代码
小万哥 小万哥
1年前
深入解析 Java 面向对象编程与类属性应用
Java面向对象编程面向对象编程(OOP)是一种编程范式,它将程序组织成对象。对象包含数据和操作数据的方法。OOP的优势:更快、更易于执行提供清晰的结构代码更易于维护、修改和调试提高代码重用性减少开发时间类和对象类是对象的模板,它定义了对象的属性和方法。对
小万哥 小万哥
1年前
Kotlin 面向对象编程 (OOP) 基础:类、对象与继承详解
面向对象编程(OOP)是一种编程范式,它通过创建包含数据和方法的对象来组织代码。相较于过程式编程,OOP提供了更快更清晰的结构,有助于遵守DRY(Don&39;tRepeatYourself)原则,使代码更易于维护和扩展。在Kotlin中,类和对象是OOP的核心。类作为对象的模板,定义了对象的行为和状态;对象则是类的具体实例。例如,Car类可以定义汽车的品牌、型号等属性,以及如驾驶和刹车等功能。通过构造函数可以快速初始化对象的属性。此外,Kotlin支持继承机制,子类可以从父类继承属性和方法,促进代码重用。