• Lua初学习 9-13_04 模拟C#属性器 ,闭合函数


    Lua代码:

    human = {
    age = 0,
    __newindex = function (t,k,v)
     if(k == "age") then
     print("age 变化了")
     human.age = v
     else
     print("其他属性变化了")
     end
    end
    }

    coco = {
    --age = 0
    }

    setmetatable(coco,human)
    human.__index = human

    --当改变coco里面的属性时候,会调用元表里面元方法__newindex,就像调了C#属性器
    --给coco.age赋值的时候,调了元表里面的元方法,在元方法里面给父类.age赋值
    --当我们get coco.age属性时候,又会调元表里面的元方法__index,拿到父类的age

    coco.age = 0
    print(coco.age)
    coco.age = 1
    print(coco.age)
    coco.age = 2
    print(coco.age)
    coco.name = "zz"

    ===================debug===============

    age 变化了
    0
    age 变化了
    1
    age 变化了
    2
    其他属性变化了

     

    总结一下:怎么感觉Lua里面的 __index 和 _newindex 有点像C#里面的属性器  get set 方法,但是Lua里面得给父类重写__index 和 _newindex方法 

     

    2:闭合函数:(跟C#里面的匿名函数那些差不多)     

    function Test()
      print("enter Test")
      return function(n) return n*2 end --->func 需要传参数
    end

    print(Test()(11)) -----> enter Test    22

    ============================================

    function Test(n)
    print("enter Test")
    return function() return n*2 end   --->func 不需要传参数  直接使用Test方法传进来的参数  闭包
    end

    print(Test(11)())

  • 相关阅读:
    Long类型在前端丢失精度
    Spring Event事件通知
    el-drawer去除自带黑色边框、允许滚动
    XSS攻击
    入门1:nodejs类比Java中:JVM
    https的crt和key证书
    C#如何定制Excel界面并实现与数据库交互
    数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库
    写代码同写文章一样
    操作笔记
  • 原文地址:https://www.cnblogs.com/cocotang/p/5868715.html
Copyright © 2020-2023  润新知