161218 lua学习 --代码+笔记 《面向对象》

–面向对象编程
–并不是真正的面向对象 脚本语言 lua知识去模拟这种面向对象的额方法

Account =
{
    balance= 10
}
function Account.count(self,v )
    -- body
    self.balance = self.balance + v
    print("value is ".. self.balance)
end


tt=Account
tt.count(tt,12)--第一种方法  22
tt:count(12)--第二种方法 34
function Account:mytostring( )--注意看细节
    -- body
    print("jieguo shi "..self.balance)
end

tt:mytostring()
--在一个myClass.lua文件中书写如下:
--[[
local myClass = {
    name = "ls"
}
function myClass:showname( )-- :可以访问到table中的变量
    print(self.name)
end

return myClass
]]
--在另一个文件中
local mtt = require("myclass")
mtt:showname()

–继承和多重继承(伪继承)

--继承 setmetatable(a,b)---相当于 a类继承b类
Account = {num =100}

function Account:new( o)
    -- body
    o = o or {}
    setmetatable(o,self)--相当于 o并继承了Account
    self.__index = self
    return o
end
function Account:show( v )
    print(v)
    print(self.num)  --父中
    print(self.bb + v )--自己中
    -- body
end

a = Account:new{bb=12}
a:show(1.0)

–多继承(伪)

function search( k,plist )
    for i=1,#plist do
        local v = plist[i]
        if v then
            return v
        end
    end
end


function creatclass( ... )
    local c = {}
    local parent = {...}
    print("1\n")
    setmetatable(c,{__index = function ( t,k )
        print("2\n")
        return search(k,parent)
    end})
    print("3\n")
    c.__index = c;
    function c:new( o )
        o = o or {}
        print("4\n")
        setmetatable(o,c)
        return o
    end
end
--此方法一般不怎么用 

–私密性和单一方法
和c++中的类的封装十分相似

function newAccount( initlizedBanlace )
    local self = {blance = initlizedBanlace}
    local show = function ( v )
        self.blance = self.blance-v
    end
    local getBanlance = function (  )
        return self.blance
    end

    return{
        show = show,
        getBanlance = getBanlance
    }
end

acc = newAccount(200)
print(acc.getBanlance())
acc.show(200)
print(acc.getBanlance())
function newObject( value )
    return function ( action,v )
        if action == "get" then return value
        elseif action == "set"  then value = v
        else
            print("unknown action")
        end
    end
end

d = newObject(34)
print(d("get"))
d("set",12)
print(d("get"))
d("ded")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值