`
石头的日记
  • 浏览: 200818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

在Lua中实现继承

阅读更多

 最近做的一个项目用到了Lua,所以也顺便学习了些,想必玩过魔兽的朋友都听说过lua,不过相对来说用这个的还是不多。

  面向对象只是一种思想,在Lua我们也可以实现,减少了冗余代码。

  先建一个类 person

  person={

    name="a",

    age = 23,

    high=177,

    weight=65

}

 

在pserson表里,我们定义了一个人所具有的所有属性,当然我们还可以有动作(方法),比如人给人加一个说话的动作,可以这样写:

   functiuon person:say()

      print(self.name.."我来了,哈哈")

   end

或者

  person.say= function(self)

  print(self.name.."我来了,哈哈")

  end

上边的两方法可以说是一样的只是命名方法不一样而已,相当于都是表person增加个说话的方法,唯一不同的是,可以看书,两个方法一个要带参数,一个不用,在这就运用到了Lua的语法糖语法 “:”,这个“:”相当于你在调用方法的时候把self自己给传进去了,比如:

调用 person:say()  和person.say(person)

  >>输出   a我来了,哈哈

相信对于这个语法大家已经明白了,我们继续继承

 

 

现在person的原型已经出来了,既然是面向对象,我们就要得有初始的构造方法啊,ok,下面我们就先写个person的构造方法

 

先看代码:

 

  function person:new(o)
    --private 成员区域
    o = o or {}
    setmetatable(o,self)
    self.__index = self
    return o
end

 

ok构造方法完成,在这里需要解释下 元表的意思了,lua中任何一张表都有其元表,一组相关的表可以共享一个元表(也就是说可以共享元表的属性了),默认的是创建一个不带元表的表。在这里我们使用setmetatable(o,self),(lua的方法setmetatable)这个方法的意思就是,表o的元表是self,self  -前面说过,就是谁调用new()self就是谁,在这里就是person,我们理一下,在这个方法里:o是一个传进来的表table,他的元表是person,如此只要你给这个方法传一个值(最好是一个表table),我们都会给你返回一个以person为元表的table表了,如此一来,你只要new一下我们都会造一个person对象了

 

 

 

当然,我们还想要继承,我们怎样做:

给person加一个方法,

person.extend=person.new

呵呵,简单吧,其实就是person的new()方法我们变个名字而已,比如:

C=person:extend()

就代笔C继承了person,拥有了person所拥有的属性,

你可以试试:

C:say()

>>输出:a我来了,哈哈

 

当然我们还可以扩展子类C自己的属性和方法,我们只需

C=person:extend({hand="two",go=function() print(self.name.."__gpgpgp") end})

调用C:go()

>>输出:a__gpgpgp

调用print(C.name)

>>输出:a

 

1
0
分享到:
评论

相关推荐

    Lua 类的继承与函数override

    在 Lua 中,继承是通过修改子类的元表来实现的。子类的元表指向父类,这样子类就可以访问父类的方法和属性。下面是一个简单的继承示例: ```lua Student = { grade = nil } function Student:new(name, age, grade...

    Lua 中实现类

    在Lua编程语言中,虽然原生不支持传统的类(class)和面向对象编程(OOP)概念,但可以通过模拟来实现。Lua的核心设计理念是简洁和轻量,因此它提供了元表(metatable)和函数作为其核心机制来实现类和对象的模拟。...

    Lua 类的继承与override

    在 Lua 中,继承是通过修改 `__index` 元方法来实现的。子类可以继承父类的属性和方法,同时添加自己的特性: ```lua local MySubClass = { } MySubClass.__index = MySubClass function MySubClass:new() local ...

    C和C++程序员的Lua快速入门.pdf

    在Lua中实现继承较为复杂,这通常是高级话题的一部分,但如果理解了表的工作原理,就能够实现简单的面向对象编程。 **线程(协程)** Lua中的线程是协作式多任务的基础,它是不同于操作系统级别的抢占式线程。协程...

    teaEntityInLua:Lua 中的继承和基本函数式编程库

    "teaEntityInLua" 是一个针对 Lua 的项目,它着重于展示如何在 Lua 中实现继承以及使用基本的函数式编程库。下面将详细介绍 Lua 中的继承和函数式编程概念。 ### Lua 中的继承 Lua 并没有像 Java 或 C++ 那样的类...

    lua面向对象实现

    在Lua中实现面向对象编程(OOP)虽然不像其他静态类型语言那样直接,但通过元表和元方法的概念,同样可以构建出具有类和对象的结构。 面向对象编程的基本概念包括类、对象、继承、封装和多态。在Lua中,这些概念的...

    lua语言实现类的原理

    lua类的实现

    Lua实现类继承

    在Lua中,由于其轻量级的特性和元表(metatable)机制,实现类继承并不像其他一些静态类型语言那样直接,但依然可以通过一些技巧来实现。以下将详细解析标题和描述中提到的Lua类继承实现方式。 首先,我们需要了解...

    Lua中的类编程代码实例

    在Lua中实现继承,通常涉及到复制父类的元表到子类的元表中。然后子类可以添加或覆盖父类的方法,实现特有功能。文件内容中展示了继承的实现: ```lua SpecialAccount = Account:new() -- 继承Account s = ...

    lua中文教程,从基础到深入的让你学习lua

    在Lua中,变量是动态类型的,无需预先声明。它支持五种基本数据类型:nil(无值)、boolean(布尔型)、number(数字)、string(字符串)和table(表)。表是Lua的通用数据结构,可以用于数组、集合、对象等多种...

    Lua中文参考----学习Lua的好资料

    元表则是Lua中实现面向对象编程的关键,通过元表,可以定义对象的行为和继承关系。 3. **函数和闭包**:Lua中的函数是第一类公民,可以作为参数传递、作为返回值返回。闭包则允许函数记住并访问其词法作用域内的...

    Lua程序设计和lua-5.1中文手册

    此外,还有关于元表和元方法的概念,这是Lua实现面向对象编程的关键,它允许你自定义对象的行为。 "lua-5.1中文手册.chm"则是一个详细的参考文档,覆盖了Lua 5.1的所有内置函数、库和API。你可以在这里查找关于字符...

    Lua程序设计,2~4版本pdf电子书,C的Lua语言原滋原味

    在Lua中,table是所有数据结构的基础,它既可以用作数组,也可以用作哈希表,甚至可以实现类和对象的概念。通过元表和元方法,开发者可以自定义表的行为,实现类似类的继承和多态。第四版进一步强化了这些特性,使得...

    Cpp2Lua 导出c++到lua

    一旦实现,用户将能够在Lua中使用C++的继承体系,进一步增强代码复用和模块化。此外,考虑添加对模板类、异常处理以及C++11及更高版本特性的支持,也是提升`Cpp2Lua`实用性的关键。 总结来说,`Cpp2Lua`为C++和Lua...

    lua api lua文档

    - **马尔可夫链算法**:使用Lua实现的一种统计模型。 #### 十一、Tables与Objects - **数据结构**:介绍Lua中各种数据结构的应用,如数组、矩阵、链表等。 - **数据文件与持久化**:如何将Lua数据结构保存到文件中...

    Lua多重继承代码实例

    首先,让我们看一个关键函数search(),它在多重继承中扮演了查找父类方法的角色。这个函数接收两个参数,第一个是要搜索的键(例如方法名),第二个是父类列表。函数遍历列表,查找是否存在该键对应的值。如果找到,...

    Lua 单例的实现

    Lua中没有类的概念,但是程序猿说要面向对象,然后就有类。程序猿说要继承 和override,然后就有了继承 和 override 。程序猿说要有单例然后有了单例 这里用 Person 和 Student 来作为例子。有少许解释在代码中。

    Lua中利用元表实现类和多态教程共28页.pdf.zip

    总之,“Lua中利用元表实现类和多态教程”这个资源提供了丰富的信息,帮助开发者深入了解如何在 Lua 中构建面向对象的程序结构。通过学习元表的使用,开发者可以更好地掌握 Lua 语言的灵活性和强大性,这对于编写...

    Lua中文教程

    6. **面向对象编程**:Lua的OOP是基于原型的,对象可以通过表创建,并通过元表实现继承。 7. **错误处理与调试**:Lua通过错误抛出和捕获进行错误处理,且提供了debug库支持调试。 8. **扩展与嵌入**:Lua提供了...

Global site tag (gtag.js) - Google Analytics