ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

十分钟学会Lua五:面向对象基础

2021-10-04 15:33:44  阅读:182  来源: 互联网

标签:Account 面向对象 self Lua 十分钟 withdraw balance


       面向对象有三个核心特征:类,继承,私有性。基于这三方面,介绍Lua的面向对象的编程和实现原理。从很多意义上讲,Lua语言中的一张表就是一个对象。使用参数self是所有面向对象语言的核心点。

先看下一段代码,这是一个简单表达账户储存和提取的代码:

Account = {balance = 0}

function Account.withdraw ( v)

Account.balance = Account.balance – v

end

Account.withdraw ( 100.00 )

a,Account = Account, nil

a.withdraw ( 100.00)                       --> ERROR!

这里代码会出现错误,这是因为目前withdraw函数只针对特定对象即Account工作。对象a不能使用withdraw函数。因此,要想实现函数对于对象的通用,我们的方法需要一个额外的参数来表示函数的接受者,这个参数通常被称为self或this:

function Account.withdraw ( self , v)

self.balance = self.balance – v

end

a1 = Account ; Account = nil

a1.withdraw(a1,100.00 )        

a2 = {balance=0, withdraw = Account.withdraw}

a2.withdraw ( a2,260.00 )

大多数面向对象语言都隐藏了self这个机制,从而使得程序员不必显式地声明这个参数。Lua语言同样可以使用冒号操作符(colon operator)隐藏该参数。使用冒号操作符,我们可以将上例重写为a2 : withdraw (260.00)。冒号的作用就是:定义函数时,给函数的添加隐藏的第一个参数self; 调用函数时,默认把当前调用者作为第一个参数传递进去。参见下段代码。

Account = { balance=0}

function Account : withdraw ( v)

self.balance = self.balance – v

end

function Account : deposit (v)

self.balance = self.balance + v

end

Account.deposit(Account,200.00 )

Account : withdraw( 100.00)

标签:Account,面向对象,self,Lua,十分钟,withdraw,balance
来源: https://www.cnblogs.com/achevery/p/15366475.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有