zoukankan      html  css  js  c++  java
  • Lua初学习 9-13_03 元表与元方法

    1:元表与元方法

         a={name = "a name" , age = "a age 18"} b={}

    setmetatable(b,a)

    测试001:

    print(a.age) ----> a age 18

    print(b.age) ----> nil  

    测试002:

    a.__index = a

    print(a.age) ----> a age 18

    print(b.age) ----> a age 18

    测试003-1:

    a.orz = 99

    b.orz = 100

    print(b.orz) ----> 100

    测试003-2:

    a.orz = 99

    a.__newindex = function () print("a new index") end

    b.orz = 100

    print(b.orz)  -----> 99   (A:b在给字段orz赋值的时候,会调元表里面的元方法__newindex,调完之后b.orz并没有赋值,打印b.orz的时候,发现没有值,去访问元表中的元方法__index,---> 99 )

    当设置一个 table key的value值时,先访问table的元表中的元方法__newindex,(如果table的元表里面重新定义了__newindex,将会调用元表中的元方法__newindex)

    总结:__index  和 __newindex 都是在table中没有所需访问的Index时才发挥作用。

           2: 具有默认值的table

             其实就是设置了 table 的元表,在元表里面重写元方法 __index ,这个方法返回一个 固定的值,比如 0 或者 1

           3:只读的table

    function readonly(t)

               table proxy = {}

               table mt = {

    _index = t

    _newindex = function (t,k,v)

    print("只读table,无法写入")

    end

    }

    setmetatable(proxy,mt)

    return proxy

    end

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

    用上述的方法返回一个只读的table ( readonly({创建一个Table构造式}))

     

     

  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/cocotang/p/5868183.html
Copyright © 2011-2022 走看看