• Lua程序设计(一)面向对象概念介绍


    完整代码

    local mt = {}
    mt.__add = function(t1,t2)
        print("两个Table 相加的时候会调用我")
    end
    local t1 = {}
    local t2 = {}
    -- 给两个table 设置新的元表,一个元表就是一个table的值
    setmetatable(t1,mt) -- meta:元素
    setmetatable(t2,mt)
    -- 进行相加操作
    local t = t1 + t2
    print(t)
    
    --[[输出结果
    两个Table 相加的时候会调用我
    nil
    --]]

     

    完整代码

    -- 创建一个元表 (是创建一个类吗?)
    local mt = {}
    mt.__add = function(s1, s2)
        local result = ""
        if s1.sex == "boy" and s2.sex == "girl" then
            result = "一个男孩和一个女孩的家庭"
        elseif s1.sex == "girl" and s2.sex == "girl" then
            result = "两个女孩的家庭"
        else
            result = "未知孩子的家庭"
        end
        return result
    end
    -- 创建两个table,可以想象成是两个类的对象(实例化两个类)
    local s1 = { name = "Per1", sex = "boy" }
    local s2 = { name = "Per2", sex = "girl" }
    -- 给两个table 设置新的元表,一个元表就是一个table的值
    setmetatable(s1, mt)
    setmetatable(s2, mt)
    -- 进行加法操作
    local result = s1 + s2
    print(result)  -- 一个男孩和一个女孩的家庭

     

    ----------------------------------------------------------- Lua面向对象2
    local t = {
        name = "Tinywan"
    }
    local mt = {
        __index = function(table,key)
            print("虽然你调用了我不存在的字段和方法,不过没关系,我能检测出来"..key)
        end
    }
    setmetatable(t,mt)
    print(t.name)
    print(t.age)
    --[[输出结果 Tinywan 虽然你调用了我不存在的字段和方法,不过没关系,我能检测出来age nil --]]

    ----------------------------------------------------------- Lua面向对象2
    local t = {
        name = "Tinywan"
    }
    local mt = {
        money = 808080
    }
    mt.__index = mt
    setmetatable(t,mt)
    print(t.money)
    -- 输出结果 808080

    ----------------------------------------------------------- Lua面向对象2
    local t = {
        name = "Tinywan"
    }
    local mt = {
        __index = {
            money = 909090
        }
    }
    setmetatable(t,mt)
    print(t.money)
    -- 输出结果 909090

     

    ----------------------------------------------------------- Lua面向对象2
    local smartMan = {
        name = "Tinywan",
        age = 26,
        money = 800000,
        say_fun = function()
            print("Tinywan say 大家好")
        end
    }
    
    local t1 = {}
    local t2 = {}
    local mt = { __index = smartMan } -- __index 可以是一个函数,也可以是一个函数
    setmetatable(t1, mt)
    setmetatable(t2, mt)
    print(t1.money)
    t2.say_fun()
    --- 输出结果
    -- 800000
    -- Tinywan say 大家好

  • 相关阅读:
    rails的字符编码
    rails中ActionController::InvalidAuthenticityToken解决办法
    ruby on rails 实战(二)
    ruby on rails 实战(一)
    朴素贝叶斯趣味挑战项目
    python re的findall和finditer
    使用Naive Bayes从个人广告中获取区域倾向
    第五周(2.5~2.11)
    第四周(1.29~2.4)
    第三周(1.22~1.28)
  • 原文地址:https://www.cnblogs.com/tinywan/p/6940784.html
Copyright © 2020-2023  润新知