• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > 浅谈Lua的面向对象特性

浅谈Lua的面向对象特性

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了lua垃圾回收,lua 强制回收,lua51.dll修复,影音先锋资悠悠lua,lua等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

 面向对象的特性

  •     类: 类是可扩展的模板用来创建对象,提供状态的初始值(成员变量)和行为的实现。
  •     对象: 它是类的实例并具有分配给自己独立的内存。
  •     继承: 它是由变量和类的函数被其他类继承的概念。
  •     封装: 它是将数据和函数相结合的一类内的方法。数据可以在类的外部与函数的帮助下进行访问。它也被称为数据抽象。

Lua的OOP

在Lua中实现面向对象与表和Lua的第一类函数。通过将函数和相关数据插入表中形成一个对象。继承可以在metatables的帮助下来实现,提供了一个查找机制不存在的函数(方法)和在父对象字段。

在Lua表有这样的状态和标识对象,它是独立于值的特性。两个对象(表),具有相同的值但在不同的对象,而一个对象可以具有在不同的值,但它始终是相同的对象。就像对象表中有一个生命周期,独立创建或被创建。
一个真实世界的例子

面向对象的概念是广泛的,但要明白和获取最大利益。

让我们考虑一个简单的数学例子。我们经常会遇到,我们工作在不同的形状像圆形,长方形和正方形的情况。

形状可以有一个共同的属性区。因此,我们可以从与共同属性区域的基础对象形状扩展的其它形状。每个形状都可以有其自己的性质和功能类似的矩形可以有属性的长度,宽度,面积作为其属性,printArea中和calculateArea作为它的函数。
创建一个简单的类

一个简单的类实现矩形三个属性面积,长度和宽度如下所示。它也有一个printArea中功能打印所计算的面积。

Rectangle = {area = 0, length = 0, breadth = 0}

-- Derived class method new
function Rectangle:new (o,length,breadth)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  self.length = length or 0
  self.breadth = breadth or 0
  self.area = length*breadth;
  return o
end

-- Derived class method printArea
function Rectangle:printArea ()
  print("The area of Rectangle is ",self.area)
end</div>

创建对象

创建对象是类的实例分配存储器的过程。每个对象具有它自己的存储器和共享公用类数据。

访问属性

在类中用点 . 操作符,如下图所示,可以访问属性

访问成员函数

使用冒号运算符,如下图所示,可以访问对象成员函数。

存储器被分配和初始值被设定。初始化过程可以比在其它面向对象的语言构造。它只是一项功能设定值,如上图所示。
完整例子

让我们来看看使用面向对象的Lua中一个完整的例子。

Shape = {area = 0}

-- Base class method new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end

-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)

myshape:printArea()</div>

当运行上面的程序,会得到如下的输出。

Lua的继承

继承是扩展形状简单的基本对象,以矩形,正方形等的处理。它通常用于在真实世界中的共享和扩展的基本性质和功能。

让我们看一个简单的类扩展。有一个类,如下图所示。

  Shape = {area = 0}
-- Base class method new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end
-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end</div>

我们可以扩展的形状为正方形类如下所示。

-- Derived class method new
function Square:new (o,side)
  o = o or Shape:new(o,side)
  setmetatable(o, self)
  self.__index = self
  return o
end</div>

重载基础函数

我们可以重载基类函数使用基类中的函数,而不是派生类它自己再实现,如下图所示

function Square:printArea ()
  print("The area of square is ",self.area)
end</div>

继承完整的例子

Lua中我们可以扩展的简单类实现,如上图所示metatables另一个新的方法。所有的成员变量和基类的函数被保留在派生类。

Shape = {area = 0}
-- Base class method new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end
-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)
myshape:printArea()

Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
  o = o or Shape:new(o,side)
  setmetatable(o, self)
  self.__index = self
  return o
end

-- Derived class method printArea
function Square:printArea ()
  print("The area of square is ",self.area)
end

-- Creating an object
mysquare = Square:new(nil,10)
mysquare:printArea()

Rectangle = Shape:new()
-- Derived class method new
function Rectangle:new (o,length,breadth)
  o =

您可能想查找下面的文章:

  • 浅谈Lua的面向对象特性

相关文章

  • Lua中执行系统命令方法介绍
  • Lua字符串库中的几个重点函数介绍
  • Lua中使用模块的一些基础知识
  • Lua教程(二):语法约定
  • Lua中的类编程代码实例
  • Lua学习笔记之数据类型
  • 把Lua函数传递到C/C++中实例
  • Lua编程示例(五): C语言对Lua表的读取和添加
  • Lua中的递归函数写法实例
  • Lua极简入门指南(一):函数篇

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua协程(coroutine)程序运行分析
    • Lua变量类型简明总结
    • Lua返回一个Closures函数实例
    • Lua loadstring函数用法实例
    • lua+love2d制作的2048游戏
    • Lua和C++的通信流程代码实例
    • 实例讲解Lua中pair和ipair的区别
    • Lua教程(五):C/C++操作Lua数组和字符串示例
    • 详解Lua中的变量相关知识点
    • Lua中table的一些辅助函数介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有