Lua 面向对象 创建类实例

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

常用的面向对象编程语言:C++、Java、Object-C、C# 等

面向对象特征:封装、继承、多态

Lua 中的面向对象
对象由属性和方法(函数)组成,Lua 中最基本的结构是 table,所以需要用 table 来描述对象。
继承可以通过 metetable 模拟。

下面展示 类实例 的创建

local Biology = { birth = "", weight = 1, speed = 0 }-- 创建对象实例
function Biology:new(o)o = o or {}setmetatable(o, self)self.__index = selfreturn o
end-- 函数 :Eat
function Biology:Eat(value)self.weight = self.weight + valueprint("Biology Eat:"..self.weight)
end-- 函数 .Run
function Biology.Run(self, value)self.speed = valueprint("Biology.Run:"..value)
end-- 创建对象实例
local b1 = Biology:new(nil)
-- 创建对象实例
local b2 = Biology:new(nil)-- 赋值
b1.weight = 100-- 赋值
b2.weight = 500print("b1.weight:"..b1.weight)
-- 输出:b1.weight:100print("b2.weight:"..b2.weight)
-- 输出:b2.weight:500-- 调用方法,使用冒号 : 将 self 传递进去
b1:Eat(10)
-- 输出:Biology Eat:110-- 调用方法,使用点 . 所以需要将 self 传递进去 b2.Eat(b2, 30)
b2.Eat(b2, 30)
-- 输出:Biology Eat:530-- 调用方法,使用冒号 : 将 self 传递进去
b1:Run(100)
-- 输出:Biology.Run:100b2.Run(b2, 200)
-- 输出:Biology.Run:200print("b1.speed:"..b1.speed)
-- 输出: b1.speed:100print("b2.speed:"..b2.speed)
-- 输出:b2.speed:200

从上方代码输出结果可以看出来
表 Biology 可以看做是类
通过 Biology:new(nil) 创建对象是为类的实例分配内存的过程。每个类实例(b1、b2)都有属于自己的内存 两个相互独立的类实例,
调用的属性 weight、speed
调用的函数 :Eat、:Run
都是互不干扰的

访问属性可以使用点号 .
b1.speed

function Biology:Eat(value)
访问成员函数可以使用冒号 :
b1:Eat(10)

访问成员函数也可以使用点号 . 然后在第一个参数位置将实例自己传递进去
b2.Eat(b2, 30)

Lua 面向对象 创建类实例相关推荐

  1. python创建类的实例方法-Python中动态创建类实例的方法

    简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...

  2. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

  3. Lua 面向对象基础-类和对象(一)

    目录 1. lua中创建对象 2.lua中定义类的思路 3.元表的概念 4.类的定义和实例化 5. 重写类的方法 lua是一门面向过程的脚本语言,lua语言对于事物.结构通通描述为 table,而类和 ...

  4. python面向对象---创建类

    面向对象Object Oriented\ *概述* *面向过程* 分析出解决问题的步骤,然后逐步实现. 例如:婚礼筹办 – 发请柬(选照片.措词.制作) – 宴席(场地.找厨师.准备桌椅餐具.计划菜品 ...

  5. C# 反射 通过类名创建类实例

    "反射"其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用 ...

  6. const php 数组,php-如何在该类中创建类实例的const数组?

    我正在创建自己的PHP类.我想在该类实例的该类中拥有常量引用,例如枚举. 我不断收到2个错误: 1.常量不能是数组 2.在第11行解析错误(请参见下文) 怎么了?我可以严重地没有常量数组吗?我来自Ja ...

  7. 面试题,反射创建类实例的三种方式是什么

    1.获得Class:主要有三种方法: (1)Object-->getClass (2)任何数据类型(包括基本的数据类型)都有一个"静态"的class属性 (3)通过class ...

  8. 牛逼!java反射创建类实例的三种方式

    说到博客,大家会不由自主的地想到博客园,CSDN,GitHub,简书等.在这些平台里,有着无数的程序员发表自己的博客,这些博客有的是纯技术干货的分享,有的是对编程思想的感悟.可以说,一个好的博客平台是 ...

  9. 雷林鹏分享:Lua 面向对象

    面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构. 以下几种编程语言都支持面向对象编程: C++ Java Objective-C Smal ...

最新文章

  1. 修改了n次效率还是不可接受
  2. 第19章 归档模式下的数据库恢复
  3. mysql is fashion ctf_《亲爱的,热爱的》中的 CTF 大赛是什么?参加这个比赛的体验怎么样?...
  4. 从体验上拉开差距,Serverless 将成就云计算的下一个 10 年!
  5. 黑客数字雨html单页,Hei客帝国数字雨.html
  6. Sequence with Digits CodeForces - 1355A(暴力+数学)
  7. 2018CCPC吉林赛区(重现赛)补题部分——F线段树待补
  8. Mapreduce的排序、全排序以及二次排序
  9. windows效率工具,翻译软件QTranslate
  10. 从【银行销冠】化身测试工程师,小哥这样实现了人生的逆转
  11. 知道cve编号怎么搜poc_想在海南买房不知道该怎么选?快来看看这些热搜楼盘吧!...
  12. 人脸检测(十四)--MTCNN
  13. 《计算机操作系统》(第四版)大全总结
  14. Air722UG_模块硬件设计手册_V1.1
  15. AUTOCAD——超级填充命令3
  16. Eclipse集成Zxing实现扫一扫功能
  17. pytorch模型转onnx Exporting the operator _thnn_fused_lstm_cell to ONNX opset version 9 is not supported
  18. potato电脑版连接不上_potato chat正式版PC端安装教程
  19. python- 小猫钓鱼纸牌游戏
  20. OA办公系统审批流程是什么?

热门文章

  1. nodemailer使用qq邮箱的坑
  2. 机器学习初探-线性回归
  3. 川渝地区高温、缺水,水电大省的困局让源网荷储一体化来缓解
  4. 数字端口和模拟端口的区别
  5. python enumerate用法_Python enumerate 使用技巧
  6. 华为正式发布鸿蒙应用,华为正式发布鸿蒙OS系统 可随时应用在手机上
  7. HashMap 源码分析与常见面试题
  8. 硬盘启动计算机,怎么用移动硬盘启动电脑
  9. GLib-CRITICAL **: g_main_context_pop_thread_default: assertion `g_queue_peek_head (stack) == context
  10. 螃蟹的心在滴血,螃蟹的眼角滴着泪,……