zoukankan      html  css  js  c++  java
  • 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)())

  • 相关阅读:
    art.dialog
    Asp.net中web.config配置文件详解
    Web.Config文件配置之限制上传文件大小和时间
    Asp.net中的一个判断session是否合法的做法
    js倒计时
    Asp.net中web.config配置文件详解
    C#调用耗时函数时显示进度条浅探
    ChannelFactory
    NetTcpBinding 类nettcpbinding的属性和方法
    n!的位数 斯特林公式
  • 原文地址:https://www.cnblogs.com/cocotang/p/5868715.html
Copyright © 2011-2022 走看看