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构造式}))

     

     

  • 相关阅读:
    单点登录原理与简单实现
    关系型数据库中的关键字、主关键字和候选关键字
    无向图的顶点连通度
    memcmp()直接比较两个数组的大小
    静态字典树
    动态字典树
    poj 1149
    poj 2112 floyd+Dinic最大流+二分最小值
    POJ 1698 (二分图的多重匹配)
    网络流算法
  • 原文地址:https://www.cnblogs.com/cocotang/p/5868183.html
Copyright © 2011-2022 走看看