Lua语言入门 - Lua 面向对象

Lua 面向对象

面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构,通过创建和操作对象来设计应用程序。

以下几种编程语言都支持面向对象编程:

  • C++
  • Java
  • Objective-C
  • Smalltalk
  • C#
  • Ruby

Lua 是一种轻量级的脚本语言,虽然它不像 Java 或 C++ 那样内置强大的面向对象(OO)特性,但它非常灵活,可以通过一些技巧实现面向对象编程。

面向对象特征

  • 封装:将数据和方法捆绑在一起,隐藏实现细节,只暴露必要的接口,提高安全性和可维护性。

  • 继承:通过派生新类复用和扩展现有代码,减少重复编码,提高开发效率和可扩展性。

  • 多态:同一操作作用于不同对象时表现不同,支持统一接口调用,增强灵活性和扩展性。

  • 抽象:简化复杂问题,定义核心类和接口,隐藏不必要的细节,便于管理复杂性。

Lua 中面向对象

我们知道,对象由属性和方法组成。

Lua 中的类可以通过 table + function 模拟出来。

至于继承,可以通过 metetable 模拟出来(不推荐用,只模拟最基本的对象大部分实现够用了)。

在 Lua 中,最基本的结构是 table,我们可以使用表(table)来创建对象。

ClassName = {}  -- 创建一个表作为类

通过 new 方法(或其他名称)创建对象,并初始化对象的属性。

function ClassName:new(...)
    local obj = {}  -- 创建一个新的空表作为对象
    setmetatable(obj, self)  -- 设置元表,使对象继承类的方法
    self.__index = self  -- 设置索引元方法
    -- 初始化对象的属性
    obj:init(...)  -- 可选:调用初始化函数
    return obj
end

表(table)是 Lua 中最基本的复合数据类型,可以用来表示对象的属性。

Lua 中的 function 可以用来表示方法:

function ClassName:sayHello()
    print("Hello, my name is " .. self.name)
end

 使用 new 方法来创建对象,并通过对象调用类的方法。

local obj = ClassName:new("Alice")  -- 创建对象
obj:sayHello()  -- 调用对象的方法
-- 定义 Person 类
Person = {name = "", age = 0}

-- Person 的构造函数
function Person:new(name, age)
    local obj = {}  -- 创建一个新的表作为对象
    setmetatable(obj, self)  -- 设置元表,使其成为 Person 的实例
    self.__index = self  -- 设置索引元方法,指向 Person
    obj.name = name
    obj.age = age
    return obj
end

-- 添加方法:打印个人信息
function Person:introduce()
    print("My name is " .. self.name .. " and I am " .. self.age .. " years old.")
end

代码说明:

  • Person 是一个表,它有两个属性:name 和 age,这两个属性是类的默认属性。
  • Person:new(name, age) 是一个构造函数,用来创建新的 Person 对象。
  • local obj = {} 创建一个新的表作为对象,setmetatable(obj, self) 设置元表,使得该表成为 Person 类的实例。
  • self.__index = self 设置索引元方法,使得 obj 可以访问 Person 类的属性和方法。
  • introduce 是 Person 类的方法,打印该 Person 对象的名字和年龄。

调用方法:

-- 创建一个 Person 对象
local person1 = Person:new("Alice", 30)

-- 调用对象的方法
person1:introduce()  -- 输出 "My name is Alice and I am 30 years old."

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940603.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子电器架构 ---整车区域控制器

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

机器人国际会议IROS论文latex模板

机器人国际会议IROS论文latex模板 文档 root.tex 可以配置为 US Letter 纸或 A4。请注意以下重要行:\documentclass[letterpaper, 10 pt, Conference]{ieeeconf} % 如果需要 a4paper,请注释掉此行%\documentclass[a4paper, 10pt, Conference]{ieeeconf} …

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

Java中的方法重写:深入解析与最佳实践

在Java编程中,方法重写(Method Overriding)是面向对象编程(OOP)的核心概念之一。它允许子类提供一个与父类中同名方法的具体实现,从而实现多态性(Polymorphism)。本文将深入探讨Java…

基础电路的学习

1、戴维南定理 ①左边的图可简化为一个电阻+一个电压源。② ③电压源可相当于开路。将R2移到左边,R1和R2相当于并联。RR1//R2 Rx和Rt相等时,灵敏度最大,因此使Rt10K。 104电容是0.1uf。 三位数字的前两位数字为标称容量的有效数…

麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 上篇文章我们说到rsync虽好,但是缺乏实时性,在实际应用中,咱们可以将rsync写进脚本,然后写进定时任务去备份,如果每天凌晨1:00…

使用visnode做节点管理

背景 visnode起源于解决本人在研究生期间做学术研究时遇到的困惑。 当时的项目涉及到比较多的参数,需要做参数调整优化,每一次调整参数都是在上一组最优的一些参数组合中做微调,然后重新计算,每一次计算又会产生大量的文件&…

28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强

A Pixel Distribution Remapping and Multi-Prior Retinex Variational Model for Underwater Image Enhancement 摘要介绍相关工作基于模型的水下图像增强方法:无模型水下图像增强方法:基于深度学习的水下图像增强方法: 论文方法概述像素分布…

今日-冬至

夏尽秋分日 春生冬至时 今天17时21分 我们迎来冬天的第四个节气 冬至 冬至是北半球全年中 白天最短、黑夜最长的一天 过了今天 阳光的照射将逐渐增多 白天的时间也会越来越长 温暖和春意正在一点点靠近 我国民间有“数九”的习俗 又称“冬九九”“交九” 从冬至起&…

WebRTC搭建与应用(一)-ICE服务搭建

WebRTC搭建与应用(一) 近期由于项目需要在研究前端WebGL渲染转为云渲染,借此机会对WebRTC、ICE信令协议等有了初步了解,在此记录一下,以防遗忘。 第一章 ICE服务搭建 文章目录 WebRTC搭建与应用(一)前言一、ICE是什么?二、什么…

LabVIEW伸缩臂参数监控系统

LabVIEW开发伸缩臂越野叉车参数监控系统主要应用于工程机械中的越野叉车,以提高车辆的作业效率和故障诊断能力。系统通过PEAK CAN硬件接口和LabVIEW软件平台实现对叉车作业参数的实时监控和故障分析,具有良好的实用性和推广价值。 系统组成 系统主要由P…

VR博物馆能模拟哪些历史场景?

VR博物馆以其卓越的模拟能力,能够带领观众穿越时空,体验从古罗马的斗兽场到中世纪的欧洲城堡,从文艺复兴的佛罗伦萨到工业革命的蒸汽机,再到二战的紧张战场,每一种历史场景都栩栩如生,让人仿佛亲历其境&…

网络安全防范

实践内容 学习总结 PDR,$$P^2$$DR安全模型。 防火墙(Firewall): 网络访问控制机制,布置在网际间通信的唯一通道上。 不足:无法防护内部威胁,无法阻止非网络传播形式的病毒,安全策略…

投标心态:如何在“标海战术”中保持清醒的头脑?

在竞争激烈的市场环境下,“标海战术”——即大规模参与投标——已经成为许多企业争取市场份额的重要策略。然而,盲目追求投标数量可能导致资源浪费、团队疲劳以及战略目标的模糊化。在这种高强度的竞争模式中,如何保持清醒的头脑,…

ICLR 2025 | 时间序列(Time Series)高分论文总结

ICLR2025已经结束了讨论阶段,进入了meta-review阶段,分数应该不会有太大的变化了,本文总结了其中时间序列(Time Series)高分的论文。如有疏漏,欢迎大家补充。 挑选原则:均分要大于等于6(≥6,即…

SpringBoot集成ENC对配置文件进行加密

在线MD5生成工具 配置文件加密&#xff0c;集成ENC 引入POM依赖 <!-- ENC配置文件加密 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.2</ver…

ASP.NET|日常开发中数据集合详解

ASP.NET&#xff5c;日常开发中数据集合详解 前言一、数组&#xff08;Array&#xff09;1.1 定义和基本概念1.2 数组的操作 二、列表&#xff08;List<T>&#xff09;2.1 特点和优势2.2 常用操作 三、字典&#xff08;Dictionary<K, V>&#xff09;3.1 概念和用途…

金融信息系统多活技术-应用策略

目录 概述 ​编辑 多活应用场景 流水型系统 账户型系统 流水型系统应用策略 业务模型说明 系统并行策略 接入和路由策略 系列阅读 概述 本文件提出了金融信息系统多活技术的应用指南&#xff0c;金融机构可根据自身业务需要&#xff0c;结合本文件进行 多活信息系统的…

大数据之Hbase环境安装

Hbase软件版本下载地址&#xff1a; http://mirror.bit.edu.cn/apache/hbase/ 1. 集群环境 Master 172.16.11.97 Slave1 172.16.11.98 Slave2 172.16.11.99 2. 下载软件包 #Master wget http://archive.apache.org/dist/hbase/0.98.24/hbase-0.98.24-hadoop1-bin.tar.gz…

人工智能ACA(四)--机器学习基础

零、参考资料 一篇文章完全搞懂正则化&#xff08;Regularization&#xff09;-CSDN博客 一、 机器学习概述 0. 机器学习的层次结构 学习范式&#xff08;最高层&#xff09; 怎么学 监督学习 无监督学习 半监督学习 强化学习 学习任务&#xff08;中间层&#xff0…