Lua 面向对象的原理

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
Lua 面向对象的原理
lua本身是没有类的。但lua有元表和元方法,通过元表和元方法我们可以实现类的一些特征。

father = {house = 1}
son = {car = 2}

function father:printHouse()
    print("father house is ",self.house)
end

function father:printHello()
    print("father hello")
end

function son:printHouse()
    print("son house is ",self.house)
end

function test()
    father:printHouse()
    son:printHouse()
    setmetatable(son,father)
    father.__index = father
    son:printHouse()
    father.__newindex = father  
    son.house = 2  
    son:printHouse()
    father:printHouse()
    son:printHello()
    father:printHello()
end

输出:
[LUA-print] father house is1
[LUA-print] son house is nil
[LUA-print] son house is 1
[LUA-print] son house is 2
[LUA-print] father house is 2
[LUA-print] father hello
[LUA-print] father hello

首先,son house is nil,son没有house这个变量,所以为nil。当father作为元表赋给son时,lua 的执行顺序变成如下:son中如果没有house->到元表__index中去找house.这就实现了子类读父类的属性。同理,son中的函数也是一样。
而赋值,执行顺序如下:son中如果没有house->到元表__newindex中去找house.这就实现了子类写父类的属性
Lua中的面向对象实现探讨 元表概念Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。首先,一般来说,一个表和它的元表是不同的个体(不属于同一个表),在创建新的table时,不会自动创建元表。但是,任何表都可以有元表(这种能力是存在的)。e.g.t = {}p 阅读详情

相关推荐

Lua从虚拟机原理分析到lua代码实现面向对象过程的理解

希望能帮助到那些lua的初学者,更好的理解和使用lua这门语言 lua作为一个使用寄存器虚拟机的语言,他需要实现如下几个部分: 1.    将源代码编译程虚拟机可识别执行的字节码2.    为函数准备调用栈3.    内部维持一个IP(指令指针)来保存下一个将执行的指令地址4.    模拟一个cpu的运行,循环拿出ip指向的字节码,根据字节码进行解码,然后执行字节码  虚拟机有两种不同的实现方式,...

qq_28301963的博客 4235

Lua实现面向对象原理

实际上是当访问一个表的元素时,如果该元素为空(nil),那么就转去访问该表元表的 __index 元方法。这样,只需要通过将父类设置为子类的元表,那么当访问子类的方法或变量为 nil 时,就可以返回父类相应的方法或变量。可以看到,Lua 中的面向对象编程更接近于原型编程,使用表和元表来实现面向对象中我们熟悉的对象、类和继承功能。所有的键都是唯一的,并且可以是任何类型,除了 nil,包括函数和表。Lua 并没有内建的面向对象系统,但我们可以使用其表和元表的特性来实现对象、类以及继承等面向对象编程的功能。

知识无止境 351

Lua面向对象

一、面向对象特征 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。 继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 抽象:抽象(Abstracti...

午夜支枕听河流 842

Lua如何实现面向对象

(1)封装封装是指将数据(属性)和行为(方法)封装在一个对象中,并对外部隐藏对象的具体实现细节,只提供有限的接口与外部交互。这种机制提供了对外部访问的限制和保护,使得对象的使用者无需关心对象内部的实现细节,只需关注对象提供的公共接口。封装有助于提高代码的可维护性、可重用性和安全性。(2)继承继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,从而可以扩展或修改父类的功能。这种机制能够建立类之间的层次关系,使得代码可以更好地重用和扩展,同时提高了代码的可扩展性和可维护性。

m0_64251659的博客 1738

Lua面向对象编程详解:从原理到实践

Lua面向对象编程详解

weixin_46259189的博客 1233

Lua面向对象实现原理

元表概念 Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。 首先,一般来说,一个表和它的元表是不同的个体(不属于同一个表),在创建新的table时,不会自动创建元表。 但是,任何表都可以有元表(这种能力是存在的)。

yhhwatl的专栏 2225

lua 面向对象实现原理

--[[ function func( ... ) -- 对于不定参数的使用 local args = {...} for k,v in ipairs(args) do print(v) end end func(1,2,"ssa",6) ]]-- -- 面向对象实现 TSprite = { x = 0, y = 0 } -- 使用点操作符,需要显示的

zhanghow的博客 3805

lua中点号和冒号的用法以及面向对象编程的基本实现原理

Lua面向对象编程 一、面向对象特征 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性 继承:继承的思路允许在不改变源程序的基础上对其进行扩充 使得原功能得以保存,新功能得以扩展 多态:同一操作作用于不同的对象 可以有不同的解释 产生不同的执行结果 在运行时 可以通过基类的指针来调用实现派生类的方法 抽象:简化复杂的显示问题的途径 可以为具体问题找到最恰当的类...

小不点的博客 559

不止八股---Lua原理笔记(1) 面向对象

简述Lua实现面向对象原理

qq_63253400的博客 867

Lua继承原理(如何实现面向对象)

注:文章出处   http://blog.csdn.net/teng_ontheway/article/details/38900211 1.lua中的类     lua中其实是没有类的,有的只是表(table),而类之间的继承也就是将父类的表连到了一起,派生类中没有找到的属性和方法就通过元表查找父类 2.lua中类的属性    classA = {width =10, h

wonder 1224

middleclass源码深度剖析:理解Lua元表与面向对象编程的实现原理

Lua作为一门轻量级脚本语言,其简洁的设计和强大的元表机制为面向对象编程提供了灵活的基础。middleclass作为Lua生态中最受欢迎的OO框架之一,仅通过一个文件[middleclass.lua](https://link.gitcode.com/i/87498f01249a5dab1d0c066453a0c665)就实现了完整的类系统,包括继承、多态和混入等核心特性。本文将从元表操作、类创建

gitblog_00946的博客 996

不止八股---Lua原理笔记汇总和计划

不止八股---Lua原理笔记(3) 闭包和函数。不止八股---Lua原理笔记(5) xlua。不止八股---Lua原理笔记(6) gc。真是挖了大坑,慢慢填了(

qq_63253400的博客 538

HoRain云--Lua面向对象编程:从原理到实战

本文介绍了如何在Lua中模拟面向对象编程(OOP)的核心特性。Lua虽无原生OOP语法,但通过表和元表机制可实现封装、继承和多态。关键点包括:使用表作为对象载体,冒号语法实现方法调用;通过元表__index实现继承链;利用闭包创建私有成员;动态方法分发实现多态。文章还总结了常见错误(如共享默认值)和最佳实践(统一冒号语法)。Lua灵活的OOP模拟机制使其成为游戏开发等领域的理想选择,体现了"机制而非策略"的设计哲学。

2401_86544677的博客 418

lua 面向对象 继承 多态的使用---原理基于元表和_G

【代码】lua 面向对象 继承 多态的使用---原理基于元表和_G。

时间溜走了的博客 481

Lua学习随感之一关于Lua面向对象的理解

前言 靠着零碎的时间学习,今天可算是把Lua面向对象的基本原来给搞明白了,有一种守得云开见月明的感觉,没理解之前感觉很难,看哪里哪里都蒙蔽。理解了之后就感觉其实也没这么难 引用 我们知道,对象由属性和方法组成。LUA中最基本的结构是table,所以需要用table来描述对象的属性。 lua 中的 function 可以用来表示方法。那么LUA中的类可以通过 table + function 模拟出来。 至于继承,可以通过 metetable 模拟出来(不推荐用,只模拟最基本的对象大部分时间够用了)。 关于L

JoeyHuangzx的专栏 619

Cocos2d-Lua面向对象的封装的具体原理细节

   https://blog.csdn.net/maoliran/article/details/51704714

ylwdi的专栏 354

Lua面向对象

metatable的介绍: Lua的table可以模拟面向对象,都得益于metatable的强大之处。在一个table中,如果索引一个元素未能找到,解释器会去该table下的metatable中的__index元素中去寻找,即table.metatable.__index.xxx中寻找。 但是如果要修改table中的元素或赋值操作,但是该元素不存在,那么会在table中创建该元素,而不会去me

不忘初心 方得始终 4310
上一篇: Lua 点号与冒号
下一篇: python 学习笔记
缥缈的云
博客等级 码龄15年 94粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值