【学习笔记】lua中基于原型的继承

Lua-Dictionary:原型模式 Lua字典 原型模式 单元字典 单元格中的字典不同于Python。 它类似于C ++ Multimap对象。 在Lua中,它本身就是一个表表。 因为Lua是一种关联的内存编程语言,所以它放弃了类似的怪异要求。 我们可以完全在Lua中做到 对于Lua词典,它是一个表,而每个条目都是一个表。 a = {} a[ " key " ] = {} a[ " man " ]. slim = walker a[ " tom " ][ 1337 ] = slim 因为它是关联内存的关联数组。 将来,我们可以创建元理论。 那就是一个神经网络联想记忆单元。 它是由科学家编程的,我不知道它是如何工作的。 数学非常简单,但是超尺寸非常困难。 这是元理论,根本不是我们要做的事情。 但是,就像我们可以想象的科幻小说一样,然后我们创建代码逻辑来实现我们认为应该起作用的功能。 我们知道神经网络的工作原理 但是,他们不 立即下载

lua中基于原型的继承

下面将转一个例子,原文请参见:点击打开文章链接,该例子显示了,在lua编程当中:

  1. 如何创建一个基类;
  2. 如何利用基类创建一个实例;
  3. 如何用基类派生一个子类;
  4. 如何用子类创建一个实例;

源代码

print("-------------------")
--基于原型的继承

--理解为基类
Robort = {id = 001, name = "Li Lei"}

function Robort:getId()
	return self.id
end

function Robort:setId( id )
	self.id = id
end

function Robort:getName()
	return self.name
end

function Robort:setName( name )
	self.name = name
end

--用于派生子类的成员函数
function Robort:New( extension )
	local subRobort = setmetatable( extension or {}, self )
	self.__index = self
	return subRobort
end

--基类方法创建实例
robort = Robort:New()

print("robort:id-", robort:getId())
print("robort:name-", robort:getName())
print("-------------------")
--FootRobort继承自Robort类,并拥有自己的属性和方法
FootRobort = Robort:New({ position = "here" })

function FootRobort:getPosition()
	return self.position
end

function FootRobort:setPosition( position )
	self.position = position
end

--使用子类创建子类的实例
footRobort = FootRobort:New()

print("footRobort:id-", footRobort:getId())
print("footRobort:name-", footRobort:getName())
print("footRobort:position-", footRobort:getPosition())

print("---------测试:修改子类实例的成员数据,证明父类的实例的成员数据是不会受到影响的----------")

footRobort:setName("Han Meimei")
print("footRobort:Name-"..footRobort:getName())
print("robort:Name-"..robort:getName())

print("-------------------")

【结果】
-------------------
robort:id- 1
robort:name- Li Lei
-------------------
footRobort:id- 1
footRobort:name- Li Lei
footRobort:position- here
---------测试:修改子类实例的成员数据,证明父类的实例的成员数据是不会受到影响的----------
footRobort:Name-Han Meimei
robort:Name-Li Lei
-------------------
lua-object:Lua 的基于原型的 OOP 库 lua 对象 Lua 的基于原型的 OOP 库(与 LuaJIT 兼容) 该项目旨在为 Lua 中的对象提供易于使用的库。 主要特点 单继承 性状 LuaJIT 支持 扩展(特征...,初始值设定项)方法 这是 lua-object 库的核心方法,它通过应用特征和初始化程序扩展现有对象。 实际上,就基于原型的面向对象编程而言,下面的“类”是对象。 -- require object module local object = require ( " object " ) -- define simple class local HelloClass = object: extend ( function ( class ) -- class constructor function class:init ( name ) self . name = name end - 立即下载

相关推荐

局部路径规划算法 - B样条曲线(B-spline Curves)

本文详解了B样条以及代码实现

BigDavid123的博客 6508

LuaJIT虚拟机-函数与原型

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34124651的博客 668

Tesseract OCR 字库训练教程:提高识别率进阶版

通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。

小蜗牛的珍贵百宝箱 1868

原型模式lua实现

--原型模式可分为深复制和浅复制,下面以深复制为例 Prototype = {} function Prototype:new(o) o = o or {} setmetatable(o,self) self.__index = self return o end function Prototype:Clone() return self end

有用用之,无用弃之 2983

uniapp+openlayers集成天地图实战:renderjs通信陷阱与性能优化避坑指南

本文深入探讨了uniapp与openlayers集成天地图时的renderjs通信陷阱与性能优化策略。通过实战案例解析了renderjs的特殊通信机制、地图实例生命周期管理、图层懒加载等关键技巧,帮助开发者避免常见坑点,提升应用流畅度。特别针对多语言切换、热重载偏移等疑难问题提供了解决方案,是uniapp+openlayers开发者的实用避坑指南。

weixin_30872157的博客 362

PaddleOCR 与 PaddleX 调试

本文介绍了PaddleOCR与PaddleX的安装调试过程及应用对比。首先详细说明了环境准备步骤,包括安装ccache、设置环境变量及创建conda虚拟环境,提供了精简安装和源码安装两种方式。接着展示了使用PaddleOCR进行发票和手写汉字识别的测试结果,指出部分手写识别存在误差。随后对比了两者的差异:PaddleOCR专注于OCR算法优化,PaddleX则提供全流程工具链和标准化部署方案。最后演示了如何通过PaddleX部署OCR服务,包括API启动方法和客户端调用示例,为开发者提供了两种不同场景下的O

weixin_42176639的博客 1452

lua面向对象例子

#!/usr/bin/lua-- 对象A,也是一个类型(对象与类是一个东西,称之为原型) A = { x = 10, y = 20 }function A:new(o) o = o or {} -- create object if user does not provide one setmetatable(o, self) self.__index = s

缘故的博客 422

042_小驰私房菜_MTK Camera yuv旋转90度方案

做旋转可以在app层接收到数据后,自行做旋转,也可以在hal层,针对yuv format这路流进行旋转。那我们做旋转也可以采用类似的方式。预览和录像是正常的,这个是因为预览和录像有方向相关属性可以调整,系统会根据摄像头mount的角度已经当前设备的方向,进行对应的旋转。这个下面这个文件,可以修改摄像头的mount角度。,可以看到前摄的Orientation是270,所以原始出图是做了90度的旋转。这个方案,思路就是在配流信息中,将rotation信息进行修改。注:本文章所用权归:小驰成长圈,禁止转载宣传!

587

lua 给userdata设置元表_Lua基础知识总结(入职面试题)

2019年8月刚入职新公司时,因为之前的项目都没有使用lua的经验,所以jojo老大出了一份题让我想尽办法找出答案,当时对于一个无经验的小菜鸟来说,属实费了不少功夫,如今分享出来,希望能对刚使用lua的朋友们有所帮助,如果有大佬看到有错误的地方,欢迎指出,感激不尽。1、Lua的基础工作原理,.lua文件实时编译之后,给到虚拟机的是什么指令. 具体指令形式有看吗?这个指令占了多少位数据,第n位主句代...

weixin_39673947的博客 706

搭建ROS小车真的难吗?

搭建ROS小车真的难吗?不难 1.引言 本着为大家谋福利的心态,根据自己以往的开发经验,打算写一个从零开始制作一个可以实现地图构建和导航的ROS小车。目前某宝上面有很多现成产品,但是我个人认为,一个好的移动机器人开发工程师,应该对机器人的整个流程都能具备维护的能力,然后再深入研究其中一个方向即可。看到网上很少有整个系列的开发教程,看到同学们大多东拼西凑,浪费了不少时间。我就想着利用空余时间,将我本人的开发过程输出给大家。有基础理论、有实际工程代码、有丰富的学习资料,尽最大努力帮大家进入移动机器人的大门。 国

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

python全栈入门到实战【基础篇 01】Python初识:定位、优势与发展历程

本文介绍了热门编程语言Python。它是解释型高级语言,具通用、入门友好、胶水型特点,以简洁易读为设计哲学。优势包括语法简洁高效、生态庞大、跨平台、社区活跃、应用广泛、门槛低。发展历经诞生(1989-1994,吉多创建,1994年1.0发布)、成长(版本迭代,3.0发布)、崛起(Web与大数据推动)、爆发(AI浪潮助推)及持续迭代阶段。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1万+

24、Lua 学习笔记之二(进阶话题)

module同时定义了一个新的包的函数环境,以使在此包中定义的全局变量都在这个环境中,而非使用包的函数的环境中。但二者还是迥然不同的,元表可以动态的改变,C++虚表是静态不变的,元表可以影响表(以及其他类型的对象)的很多方面的行为,虚表主要是为了定位对象的虚方法(最多再带上一点点RTTI)。,)并且在包的函数环境里可以访问使用包的函数环境(比如,包的实现使用了print,这个变量没有在包里定义,而是定义在使用包的外部环境中)。比如在前面的代码里,两个表对象的加法运算,如果没有元表的干预,就是一种错误;

深入Java世界:探索编程之美与技术深度 1112

让openclaw接入web端的deepseek或着qwen,使用无限token

🪟 Windows: 提供原生的 PowerShell 一键安装支持!配置过程和官方版本是相同的,唯一的区别就是再选则model时要选择带Browser字样的deepseek或者qwen。安装之前需要先清理官方版本的安装痕迹,否则openclaw版本跳转不到这个中文版本。因为此版本与官方版本存在代差,在配置飞书时可能会出现无法安装飞书的情况。剩下的配置保持和官方版本一致操作即可。选中之后需要进行一次网页端的登录。登录后会出现可选择的model。安装完成后会跳到这个中文界面。涉及到接入飞书机器人的操作。

z1872385的博客 302

Lua和JS的继承原理

特性JavaScriptLua面向对象支持内建 class(ES6 起)+ 原型链依赖 table + metatable 自己实现继承机制基于 prototype 原型链基于__index的原型式继承实现方式多继承支持不支持可模拟多继承(手动组合多个 __index)

北京林业大学 吴道权(C/C++) 839

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lua继承

第一部分:LUA的继承 充电站:元表 lua中的元表和js的原型非常相似,熟悉js的朋友应该发现了在lua中,每一个表都有TA的元表metatable,lua默认创建一个不带元表的新表: t = {} print(getmetatable(t)) --nil 设置元表 mt = {name = "quick"} t = {} setmetatable(t, mt

zwcwu31的专栏 1785

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Lua 中继承与多态继承的实现

Lua 中继承与多态继承的实现引言目标背景知识类的特性原表实现类 - 封装继承类 - 继承与多态继承类 - 多重继承Reference 引言 在 lua 中并没有类的概念。但是 lua 有一个数据结构 table,我们可以基于 table 数据结构来实现类似于 C++ 中的类。 目标 实现一个类似其他语言中的类的 class 支持类与类之间的继承 支持类之间的多重继承 背景知识 类的特性 封装:面向对象编程与面向过程编程最大的区别。将客观事务封装成抽象的类 继承:面向对象编程 (OOP) 语言的一个主

YellowOne的博客 2354

Lua如何实现继承?

在上面的代码中,Animal和Dog分别定义了自己的构造函数new,并且使用闭包和元表实现了继承关系。在Dog的构造函数中,首先调用了Animal的构造函数创建一个新的对象,然后将这个对象的元表设为Dog自身,从而让它能够调用Dog的成员函数。原型继承是指通过使用已有对象创建新对象,并让新对象继承已有对象的属性和方法来实现继承。在上面的代码中,Animal是一个父类,它有一个共有属性legs和一个共有方法run。方法创建了一个新的表并将其设为自己的原型,从而继承了Animal的属性和方法。

梦回故里 2279

Lua的多重继承实现

之前讲过在Lua中实现面向对象,今天详细聊下多重继承 继承 可以重新定义从基类继承的任意方法。只需要编写一个新方法就行了。 Lua语言中的对象有一个有趣的特性,就是无须为了指定一种新行为而创建一个新类。 多重继承 1.多重继承之在多个类中查找一个字段 其实多重继承没什么特别的,除非两个将要被继承的类有相同的函数名和属性,否则,处理起来很简单。 无非就是在多个table中查找某个字段而已,不简单吗?Lua里的继承就是在别人的table里查找自己不存在的字段罢了。 那么,单继承与多重继承的差别也在这里,一.

zhutaorun的博客 1648

Lua类继承、接口继承实现原理剖析

Lua中的元方法是指元表中以"__"开头的特殊的方法,如__index,这些方法可以修改表的行为,在实现面向对象的过程中,重点就是__index方法,在访问表中未定义字段时,会调用其元表的__index方法,尝试获取表中未定义字段的值,而__index的实现方法有两种,分别是以表的方法实现,即在。implement传入一个或多个表,表中定义的函数用于给类添加新方法,注意这里是安全添加,即只添加类中没有的方法,不会实现类方法的重写,如果要实现类的方法的重写,只能手动重写。

m0_52496509的博客 1077

Lua 实现面向对象 、继承、多态

前言 在使用Unity进行游戏开发的时候,可以通过Lua进行脚本的编写,但是Lua与C#不同,C#是一个面向对象的语言,Lua是面向过程的语言,如何用Lua来实现面向对象编程,实现对象的继承和多态的特性呢。 Lua元表(Metatable)和元方法(__index) 在Lua的table中我们可以访问对应的Key来得到Value值,但是无法对两个table进行操作。Lua提供...

Htlas的博客 3935

Lua 类的继承

Lua实现继承 Lua继承使用元表的__index实现。 参考菜鸟教程网站 Shape = {} --new创建对象 function Shape:new(side) o = {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end function Shape:printArea() print("

wangningzk123的博客 1633

Lua实现继承

Lua元表使用 中的__index元方法可以实现面向对象和继承关系: lua中没有类的概念,只有table,但可以用__index模拟类和对象: local A = {} function A:new(name) self.__index = self return setmetatable({ name = name }, self) en...

一入編程深似海! 966

lua 类与继承

试试lua中的对象与继承,多说句,多继承我写c++也没用过,直接上组合就ok,因此lua的多继承如果非必须也同样可用用其他方法来实现 --lua 类与继承的实验 local Str={str="",num=0} function Str:new(s) s = s or {} --为对象绑定metatable为Str setmetatable(s,{__index=self}) retur

chlaws的专栏 1万+

Lua学习随感之一关于Lua实现继承的一些问题

问题 最近在用Lua的继承的时候,如果你在Lua中有多个“对象”去继承了同一个“类”的话,发现了个问题,当A和B同时继承C的时候,其实A和B继承的是同一个C,而在Java或者C#的面向对象中, A的C和B的C是两个不一样的,是毫无联系的。进而我知道了原来Lua中的继承只是给了个指引指向了某一个对象,而并不是重新生成这个父对象。 对比 可能这样说会有点蒙蔽,下面用代码来看下。 C#中的继承 using System.Collections; using System.Collections.Generi

JoeyHuangzx的专栏 624

lua 类的继承实现

1.lua 类中其实没有类的概念,一个类只是用一个表(table)来管理的, 如果想要实现子类继承父类,简单来说就是把两个表组到一起。 2.lua中提供了原表(Metatable),可以通过原表来改变原来lua类的一些行为,比如把两个表相加(a+b) father ={    f = "this is father"; }; father.__index = father; // 必须加...

qq_33662602的博客 5706
上一篇: 【学习笔记】Cocos2d-x 重力加速计的使用
下一篇: 【Lua学习笔记】 Lua中实现面向对象,转自云风的博客
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值